7

I have a matrix where each element represents a pixel. I want to plot the matrix (possibly with ArrayPlot). To suppress aliasing in the final graphic (which I will then export as a png), I am currently disabling any axis, caption and so on, and I'm forcing the size of the image to match the dimension of the matrix with ImageSize. I get the desired result, but I need to show the axes. Is there a way to do it?

m_goldberg
  • 107,779
  • 16
  • 103
  • 257
Lorenzo Pistone
  • 1,607
  • 11
  • 16

2 Answers2

7

Say you have a large array like:

array = Table[RandomReal[], {i, 200}, {j, 200}];

To align the cells of arraywith pixels, use the PixelConstrainedoption:

ArrayPlot[array, PixelConstrained -> True]

enter image description here

einbandi
  • 4,024
  • 1
  • 23
  • 39
  • Unfortunately, this does not seem to help if I add the the Frame: the final output size (including frame and ticks) is the dimension of the matrix, and this of course causes stretching in the data plotting. I have tried also with Show[Image[mydata, ImageSize->Automatic, Magnification->1], Axes->True], same behaviour. – Lorenzo Pistone Nov 21 '12 at 10:33
  • This is true, I didn't notice that with my minimal example. You might be able work around that by using PixelConstrained->{2,2} (or even more?) and appropriate ImagePadding settings, along with a BaseStyle that fits your demands. This way you might get rid of the aliasing. – einbandi Nov 21 '12 at 22:21
4

Instead of using the PixelConstrained option, you can use the undocumented ImageSize syntax ImageSize -> 1 -> 2. For example:

array = Table[RandomReal[],{i,10},{j,10}];

plot = ArrayPlot[
    array,
    Frame->True,
    FrameLabel->{{x, y}, {a, b}},
    ImageSize -> 1 -> {50, 30},
    PlotRangePadding->0
]

enter image description here

Let's check the actual plot range size using my function GraphicsInformation:

<<GraphicsInformation`

"PlotRangeSize" /. GraphicsInformation[plot]

{500., 300.}

So, specifying that each element of array should have pixel dimensions of {50, 30} does indeed produce an image with plot range size {500, 300}.

Carl Woll
  • 130,679
  • 6
  • 243
  • 355