![]() If you want to use mpl_toolkits and make your hands dirty, this answer would be a good read. This answer for using the subplot parameters to achieve a certain aspect. If the image does not have equal limits (is not square), one still needs to divide by the aspect of the image: asp = np.diff(ax2.get_xlim()) / np.diff(ax2.get_ylim())Īsp /= np.abs(np.diff(ax1.get_xlim()) / np.diff(ax1.get_ylim())) Or you may set the aspect of the line plot depending on its axis limits such that it gets the same size as the image (in case the image has equal x and y sizes) asp = np.diff(ax2.get_xlim()) / np.diff(ax2.get_ylim())Īsp = np.diff(ax2.get_xlim()) / np.diff(ax2.get_ylim()) You may use automatic aspect on the image ax.imshow(z, aspect="auto") It's not perfectly clear what your desired outcome is. I am using Python 2.7 and matplotlib 2.0.0 Answers Is there a way to make imshow and a scatter plot appear the same size in a figure without manually changing the axes sizes? I have also tried to adjust the subplot sizes manually by using: fig = plt.figure()īy trial and error I can get the two subplots to the correct size, though any change in the overall figure size will mean that the subplots will no longer be the same size. I have tried using gridspec as shown in this answer: fig=plt.figure()īut this gives the same result. How can I get the two sublpots to have the same height? (and width I suppose) Small example code is shown below: import matplotlib.pyplot as plt When trying this, the image appears smaller than the scatter plot. Pclt.I am trying to plot an image (using matplotlib.imshow) and a scatter plot within the same figure. t_transform(mtransforms.IdentityTransform()) ![]() # markerArr is an array of maker string, Ptch = mpatches.PathPatch(path, fill = True, transform = trans) # m is a string of scatter marker, it could be 'o', 's' etc. Import ansforms as mtransformsįrom llections import PatchCollection # also import these, to recreate the within env of scatter command # axx is the axes object that current draw, you get it from So whenever you have a scatter points to draw you can do this: # rgbaArr is a N*4 array of float numbers you know what I mean These parameters control what visual semantics are used to identify the different subsets. The relationship between x and y can be shown for different subsets of the data using the hue, size, and style parameters. The command pyplot.scatter return a PatchCollection Object, in the file "matplotlib/collections.py" a private variable _facecolors in Collection class and a method set_facecolors. Draw a scatter plot with possibility of several semantic groupings. The code is also inspired by the source code of pyplot.scatter, I just duplicated what scatter does without trigger it to draw. this trick also could be apply to draw path collection, line collection. so it is very tacky, but I can do it in whatever shape, colour, size and transparent. When I was doing my 10000-line project I figure out a general solution to bypass it. You have two option of using scatter command with multiple colour in a single call.Īs pylab.scatter command support use RGBA array to do whatever colour you want īack in early 2013, there is no way to do so, since the command only support single colour for the whole scatter point collection. ![]() This answer is dedicate to endless passion for correcting the 2013 version of myself in 2015. But after that it is quite trivial.īecause present version of support assigning: array of colour name string, array of float number with colour map, array of RGB or RGBA. This question is a bit tricky before Jan 2013 and matplotlib 1.3.1 (Aug 2013), which is the oldest stable version you can find on matpplotlib website. ![]() The output gives you differnent colors even when you have many different scatter plots in the same subplot. The only piece of code that you need: #Now this is actually the code that you need, an easy fix your colors just cut and paste not you need ax.Ĭolormap = plt.cm.gist_ncar #nipy_spectral, Set1,PairedĬolorst = #Let's generate some random X, Y data X =. scatter with no error bars) you can also change the colours after that you have plotted them, this sometimes is easier to perform. If you have only one type of collections (e.g. Xs=X*nRows #use list multiplication for repetition I think the most elegant way is that suggesyted by do a loop making multiple calls to scatter.īut if for some reason you wanted to do it with just one call, you can make a big list of colors, with a list comprehension and a bit of flooring division: import matplotlibĬolors = matplotlib.cm.rainbow(np.linspace(0, 1, len(Ys)))Ĭs = for i in range(len(Ys)*len(X))] #could be done with numpy's repmat When you have a list of lists and you want them colored per list. The normal way to plot plots with points in different colors in matplotlib is to pass a list of colors as a parameter. ![]()
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |