You can subscribe to this list here.
2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(3) |
Jun
|
Jul
|
Aug
(12) |
Sep
(12) |
Oct
(56) |
Nov
(65) |
Dec
(37) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2004 |
Jan
(59) |
Feb
(78) |
Mar
(153) |
Apr
(205) |
May
(184) |
Jun
(123) |
Jul
(171) |
Aug
(156) |
Sep
(190) |
Oct
(120) |
Nov
(154) |
Dec
(223) |
2005 |
Jan
(184) |
Feb
(267) |
Mar
(214) |
Apr
(286) |
May
(320) |
Jun
(299) |
Jul
(348) |
Aug
(283) |
Sep
(355) |
Oct
(293) |
Nov
(232) |
Dec
(203) |
2006 |
Jan
(352) |
Feb
(358) |
Mar
(403) |
Apr
(313) |
May
(165) |
Jun
(281) |
Jul
(316) |
Aug
(228) |
Sep
(279) |
Oct
(243) |
Nov
(315) |
Dec
(345) |
2007 |
Jan
(260) |
Feb
(323) |
Mar
(340) |
Apr
(319) |
May
(290) |
Jun
(296) |
Jul
(221) |
Aug
(292) |
Sep
(242) |
Oct
(248) |
Nov
(242) |
Dec
(332) |
2008 |
Jan
(312) |
Feb
(359) |
Mar
(454) |
Apr
(287) |
May
(340) |
Jun
(450) |
Jul
(403) |
Aug
(324) |
Sep
(349) |
Oct
(385) |
Nov
(363) |
Dec
(437) |
2009 |
Jan
(500) |
Feb
(301) |
Mar
(409) |
Apr
(486) |
May
(545) |
Jun
(391) |
Jul
(518) |
Aug
(497) |
Sep
(492) |
Oct
(429) |
Nov
(357) |
Dec
(310) |
2010 |
Jan
(371) |
Feb
(657) |
Mar
(519) |
Apr
(432) |
May
(312) |
Jun
(416) |
Jul
(477) |
Aug
(386) |
Sep
(419) |
Oct
(435) |
Nov
(320) |
Dec
(202) |
2011 |
Jan
(321) |
Feb
(413) |
Mar
(299) |
Apr
(215) |
May
(284) |
Jun
(203) |
Jul
(207) |
Aug
(314) |
Sep
(321) |
Oct
(259) |
Nov
(347) |
Dec
(209) |
2012 |
Jan
(322) |
Feb
(414) |
Mar
(377) |
Apr
(179) |
May
(173) |
Jun
(234) |
Jul
(295) |
Aug
(239) |
Sep
(276) |
Oct
(355) |
Nov
(144) |
Dec
(108) |
2013 |
Jan
(170) |
Feb
(89) |
Mar
(204) |
Apr
(133) |
May
(142) |
Jun
(89) |
Jul
(160) |
Aug
(180) |
Sep
(69) |
Oct
(136) |
Nov
(83) |
Dec
(32) |
2014 |
Jan
(71) |
Feb
(90) |
Mar
(161) |
Apr
(117) |
May
(78) |
Jun
(94) |
Jul
(60) |
Aug
(83) |
Sep
(102) |
Oct
(132) |
Nov
(154) |
Dec
(96) |
2015 |
Jan
(45) |
Feb
(138) |
Mar
(176) |
Apr
(132) |
May
(119) |
Jun
(124) |
Jul
(77) |
Aug
(31) |
Sep
(34) |
Oct
(22) |
Nov
(23) |
Dec
(9) |
2016 |
Jan
(26) |
Feb
(17) |
Mar
(10) |
Apr
(8) |
May
(4) |
Jun
(8) |
Jul
(6) |
Aug
(5) |
Sep
(9) |
Oct
(4) |
Nov
|
Dec
|
2017 |
Jan
(5) |
Feb
(7) |
Mar
(1) |
Apr
(5) |
May
|
Jun
(3) |
Jul
(6) |
Aug
(1) |
Sep
|
Oct
(2) |
Nov
(1) |
Dec
|
2018 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2020 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2025 |
Jan
(1) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
|
|
|
|
1
(17) |
2
(3) |
3
(2) |
4
(11) |
5
(8) |
6
(22) |
7
(16) |
8
(9) |
9
(14) |
10
(1) |
11
(8) |
12
(5) |
13
(7) |
14
(10) |
15
(28) |
16
(8) |
17
(20) |
18
(6) |
19
(5) |
20
(15) |
21
(8) |
22
(7) |
23
(14) |
24
(10) |
25
(6) |
26
(8) |
27
(9) |
28
(11) |
29
(13) |
30
(20) |
|
Hi, I am trying to plot filled paths over a U.S. map. I plot the given paths, but since these are not closed paths, the filling is truncated at a line drawn between last and first point in the path. I want to extend the path to the United States border instead. I am no expert in matplotlib or GIS. Could anyone help me find documentation or blogs discussing this type of issue? I am convinced somebody else has already faced this problem although I have not been able to find any paper, documentation, blog on it. Thank you
On Mon, Sep 26, 2011 at 12:24 PM, John Hunter <jd...@gm...> wrote: > On Mon, Sep 26, 2011 at 12:05 PM, Katie Boyle <kat...@gm...> wrote: >> Hi All, >> >> I was wondering how I take a list of 250 discrete values and match up each >> value in the list to a color in the gist_rainbow colormap. I want the >> highest value to be red, and the lowest value to be blue. I then want to >> plot a point for each value in the list, and the point's color should >> represent its value. I cannot use contourf or any other function that does >> this automatically on a continuous grid--I need to plot individual points. > > I think you are looking for "scatter", with the "c" argument being > your intensity value. You can pass the gist_rainbow colormap to the > scatter function via the cmap argument. See these examples > > http://matplotlib.sourceforge.net/examples/pylab_examples/scatter_demo.html > http://matplotlib.sourceforge.net/examples/pylab_examples/scatter_demo2.html Eg, In [43]: x, y, c = np.random.randn(3, 100) In [44]: plt.scatter(x, y, c=c, cmap='gist_rainbow') Out[44]: <matplotlib.collections.PathCollection object at 0x981b22c>
On Mon, Sep 26, 2011 at 12:05 PM, Katie Boyle <kat...@gm...> wrote: > Hi All, > > I was wondering how I take a list of 250 discrete values and match up each > value in the list to a color in the gist_rainbow colormap. I want the > highest value to be red, and the lowest value to be blue. I then want to > plot a point for each value in the list, and the point's color should > represent its value. I cannot use contourf or any other function that does > this automatically on a continuous grid--I need to plot individual points. I think you are looking for "scatter", with the "c" argument being your intensity value. You can pass the gist_rainbow colormap to the scatter function via the cmap argument. See these examples http://matplotlib.sourceforge.net/examples/pylab_examples/scatter_demo.html http://matplotlib.sourceforge.net/examples/pylab_examples/scatter_demo2.html
Hi All, I was wondering how I take a list of 250 discrete values and match up each value in the list to a color in the gist_rainbow colormap. I want the highest value to be red, and the lowest value to be blue. I then want to plot a point for each value in the list, and the point's color should represent its value. I cannot use contourf or any other function that does this automatically on a continuous grid--I need to plot individual points. I have tried creating my own colormap with: my_colors = matplotlib.colors.Colormap(my_list) but when I issue a pyplot.plot() command with the argument cmap=my_colors, I get "TypeError: There is no patch property "cmap" How do I do this correctly? Cheers, Katie
Friends, I have solved the problem by myself. I gave if w < 2.0: color = 'red' if 2.1 < w > 4.0: color='blue' So wherever the value there is a value like 2.03 or 2.05, the color was shown as black instead of red/blue. Thanks, Bala On Mon, Sep 26, 2011 at 9:25 AM, Bala subramanian <bal...@gm... > wrote: > Friends, > In the mpl site, i found the an example code called hinton_demo to plot > weighted matrix in the following link. > > > http://matplotlib.sourceforge.net/examples/api/hinton_demo.html?highlight=hinton > > I used the same script (attached test.py) making a slight modification in > the following section of the code pasted below. I just included more color > range and modified the size as np.sqrt(np.abs(w))/5. > > However when i run the script with test data (attached test.dat), i found > that the size of the square and color are not matching. For instance the > size of the squares at position 4,3 and 7,6 are small but the color (black) > is not relevant to the size. I am not getting what is going wrong. Kindly > help to resolve the problem. > > The script and test data are attached. > > *Section of the code modified* > > for (x,y),w in np.ndenumerate(W): > if w > 0: color = 'white' > else: color = 'black' > size = np.sqrt(np.abs(w)) > rect = Rectangle([x - size / 2, y - size / 2], size, size, > facecolor=color, edgecolor=color) > ax.add_patch(rect) > >
Hi, I try to apply contrast to an image with set_cmap() like it's explained in this page http://matplotlib.sourceforge.net/users/image_tutorial.html http://matplotlib.sourceforge.net/users/image_tutorial.html but when I apply a new pseudocolor nothing appends. Please help me! This is my code. import matplotlib.pyplot as plt import matplotlib.image as mpimg import matplotlib.cm as cm import numpy as np import sys turno=0 pixel=0 img16=open(sys.argv[1],'r') r=img16.read(2) val=[] i=0 riga=[] while r !="": if (pixel>=0) & (pixel<510): r1=ord(r[0]) r2=(ord(r[1])&15)<<8 ris=(float(r1|r2))/4095 riga.append([ris,ris,ris]) else: if pixel==511: val.append(riga) riga=[] pixel=(pixel+1)%512 r=img16.read(2) #for i in range(512): # print len(val[i]) # print val[i] val=np.array(val,dtype=np.float32) imgplot = plt.imshow(val) imgplot.set_cmap(cm.binary) plt.show() -- View this message in context: http://old.nabble.com/contrast-image-tp32503930p32503930.html Sent from the matplotlib - users mailing list archive at Nabble.com.
On 25 September 2011 06:59, fdu...@gm... <fdu...@gm...> wrote: > Dear all, > > Heatmap (like those on the page > http://www2.warwick.ac.uk/fac/sci/moac/students/peter_cock/r/heatmap/) > is a frequently used type of image in microarray data analysis. However, > it seems there are no convenient functions in matplotlib to plot heatmap > (please correct me if I was wrong), so I'm planning to write my own. > > Let me take the heatmap by the link > http://www2.warwick.ac.uk/fac/sci/moac/students/peter_cock/r/heatmap/scaled_color_key.png > as an example, which is produced by R. > > With my limited knowledge and expertise of matplotlib, I have the > following questions and I hope you guys could help me. > > 1) I tend to use pcolor to draw the colormap in the central area. > However, I've seen a lot of examples draw colormap with imshow. > > What's the difference between pcolor and imshow? > Shall I use pcolor or imshow to produce the heatmap in the link above? One difference between pcolor and imshow is that pcolor lines up the bottom-left corner of each square with the co-ordinates given, whereas imshow puts the grid center at those co-ordinates. My guess would be (not having implemented a heatmap) that pcolor would be the more useful to you to try first for this reason. > 2) How to draw the dendrograms on the top and left of the colormap? > > I got hints from > http://matplotlib.sourceforge.net/examples/axes_grid/scatter_hist.html > on how to append axes to current plot, but I still have now idea how to > draw the dengrograms. A quick google search suggests that scipy-cluster might help you out with the dendrogram drawing. I think I would try using separate axes objects for the heatmap and the dendrograms, and switch off the frames of the dendrogram axes. > 3) How to draw the column side colormap (the smaller one) between the > top dendrogram and the big colormap? This could another axes object too. You can use the sharex keyword to add_axes to get it to have the same x scale as the big axes. > 4) I can use colorbar to draw a colorbar, but how to place the colorbar > on the topleft of the image just as the R heatmap does? Again, the answer is to manually create the axes for your colorbar, and then specify those axes in the call to colorbar using the `cax` keyword. > 5) Any other suggestions on how to draw the heatmap? I suggest that you give it a try and post your efforts here if there are any problems. We'll also be keen to see the final result, if you'd like to share it. I hope that helps at least a little. Happy coding, Angus -- AJC McMorland Post-doctoral research fellow Neurobiology, University of Pittsburgh
Friends, In the mpl site, i found the an example code called hinton_demo to plot weighted matrix in the following link. http://matplotlib.sourceforge.net/examples/api/hinton_demo.html?highlight=hinton I used the same script (attached test.py) making a slight modification in the following section of the code pasted below. I just included more color range and modified the size as np.sqrt(np.abs(w))/5. However when i run the script with test data (attached test.dat), i found that the size of the square and color are not matching. For instance the size of the squares at position 4,3 and 7,6 are small but the color (black) is not relevant to the size. I am not getting what is going wrong. Kindly help to resolve the problem. The script and test data are attached. *Section of the code modified* for (x,y),w in np.ndenumerate(W): if w > 0: color = 'white' else: color = 'black' size = np.sqrt(np.abs(w)) rect = Rectangle([x - size / 2, y - size / 2], size, size, facecolor=color, edgecolor=color) ax.add_patch(rect)
Benjamin Root wrote: > On Sunday, September 25, 2011, Andreas Matthias <and...@gm...> > wrote: >> Paul Ivanov wrote: >> >>> On Sat, Sep 24, 2011 at 3:59 AM, Andreas Matthias >>> <and...@gm...> wrote: >>>> Hmm. I do not get a reversed list of axes. This is the output of >>>> the example code below: >>>> >>>> [<matplotlib.axes.AxesSubplot object at 0x8d8fb4c>, > <matplotlib.axes.Axes object at 0x8f633ec>] >>>> [<matplotlib.axes.AxesSubplot object at 0x8d8fb4c>, > <matplotlib.axes.Axes object at 0x8f633ec>] >>> >>> This doesn't seem right - for me that code results in: >>> [<matplotlib.axes.AxesSubplot object at 0x16d7de70>, >>> <matplotlib.axes.Axes object at 0x1b77c890>] >>> [<matplotlib.axes.Axes object at 0x1b77c890>, >>> <matplotlib.axes.AxesSubplot object at 0x16d7de70>] >>> >>> can you try explicitly swapping your axes? f.axes = >>> [f.axes[1],f.axes[0]] instead of the call to reverse? >> >> Traceback (most recent call last): >> File "t5.py", line 13, in <module> >> f.axes = [f.axes[1],f.axes[0]] >> AttributeError: can't set attribute >> >> >> I've tried it with matplotlib 1.0.1 and 1.1.0. Same error message. >> Python is 2.6.4. >> I'm stumped ... > > Sometimes installations can get mixed up. What does: > > Import matplotlib > print matplotlib.__version__ > print matplotlib.__file__ > > outputs for your v1.1.0 installation and your v1.0.1 install? 1.1.0 /home/andreas/local/python/lib/python2.6/site-packages/matplotlib/__init__.pyc This is the right place. Then I removed matplotlib/ and installed it again. But the error stays the same. Ciao Andreas
On Sunday, September 25, 2011, Andreas Matthias <and...@gm...> wrote: > Paul Ivanov wrote: > >> On Sat, Sep 24, 2011 at 3:59 AM, Andreas Matthias >> <and...@gm...> wrote: >>> Hmm. I do not get a reversed list of axes. This is the output of >>> the example code below: >>> >>> [<matplotlib.axes.AxesSubplot object at 0x8d8fb4c>, <matplotlib.axes.Axes object at 0x8f633ec>] >>> [<matplotlib.axes.AxesSubplot object at 0x8d8fb4c>, <matplotlib.axes.Axes object at 0x8f633ec>] >> >> This doesn't seem right - for me that code results in: >> [<matplotlib.axes.AxesSubplot object at 0x16d7de70>, >> <matplotlib.axes.Axes object at 0x1b77c890>] >> [<matplotlib.axes.Axes object at 0x1b77c890>, >> <matplotlib.axes.AxesSubplot object at 0x16d7de70>] >> >> can you try explicitly swapping your axes? f.axes = >> [f.axes[1],f.axes[0]] instead of the call to reverse? > > Traceback (most recent call last): > File "t5.py", line 13, in <module> > f.axes = [f.axes[1],f.axes[0]] > AttributeError: can't set attribute > > > I've tried it with matplotlib 1.0.1 and 1.1.0. Same error message. > Python is 2.6.4. > I'm stumped ... > > > Ciao > Andreas > Sometimes installations can get mixed up. What does: Import matplotlib print matplotlib.__version__ print matplotlib.__file__ outputs for your v1.1.0 installation and your v1.0.1 install? Ben Root
Paul Ivanov wrote: > On Sat, Sep 24, 2011 at 3:59 AM, Andreas Matthias > <and...@gm...> wrote: >> Hmm. I do not get a reversed list of axes. This is the output of >> the example code below: >> >> [<matplotlib.axes.AxesSubplot object at 0x8d8fb4c>, <matplotlib.axes.Axes object at 0x8f633ec>] >> [<matplotlib.axes.AxesSubplot object at 0x8d8fb4c>, <matplotlib.axes.Axes object at 0x8f633ec>] > > This doesn't seem right - for me that code results in: > [<matplotlib.axes.AxesSubplot object at 0x16d7de70>, > <matplotlib.axes.Axes object at 0x1b77c890>] > [<matplotlib.axes.Axes object at 0x1b77c890>, > <matplotlib.axes.AxesSubplot object at 0x16d7de70>] > > can you try explicitly swapping your axes? f.axes = > [f.axes[1],f.axes[0]] instead of the call to reverse? Traceback (most recent call last): File "t5.py", line 13, in <module> f.axes = [f.axes[1],f.axes[0]] AttributeError: can't set attribute I've tried it with matplotlib 1.0.1 and 1.1.0. Same error message. Python is 2.6.4. I'm stumped ... Ciao Andreas
Dear all, Heatmap (like those on the page http://www2.warwick.ac.uk/fac/sci/moac/students/peter_cock/r/heatmap/) is a frequently used type of image in microarray data analysis. However, it seems there are no convenient functions in matplotlib to plot heatmap (please correct me if I was wrong), so I'm planning to write my own. Let me take the heatmap by the link http://www2.warwick.ac.uk/fac/sci/moac/students/peter_cock/r/heatmap/scaled_color_key.png as an example, which is produced by R. With my limited knowledge and expertise of matplotlib, I have the following questions and I hope you guys could help me. 1) I tend to use pcolor to draw the colormap in the central area. However, I've seen a lot of examples draw colormap with imshow. What's the difference between pcolor and imshow? Shall I use pcolor or imshow to produce the heatmap in the link above? 2) How to draw the dendrograms on the top and left of the colormap? I got hints from http://matplotlib.sourceforge.net/examples/axes_grid/scatter_hist.html on how to append axes to current plot, but I still have now idea how to draw the dengrograms. 3) How to draw the column side colormap (the smaller one) between the top dendrogram and the big colormap? 4) I can use colorbar to draw a colorbar, but how to place the colorbar on the topleft of the image just as the R heatmap does? 5) Any other suggestions on how to draw the heatmap? Thanks and any help will be greatly appreciated. Regards, Jianfeng
Dear all, Heatmap (like those on the page http://www2.warwick.ac.uk/fac/sci/moac/students/peter_cock/r/heatmap/) is a frequently used type of image in microarray data analysis. However, it seems there are no convenient functions in matplotlib to plot heatmap (please correct me if I was wrong), so I'm planning to write my own. Let me take the heatmap by the link http://www2.warwick.ac.uk/fac/sci/moac/students/peter_cock/r/heatmap/scaled_color_key.png as an example, which is produced by R. With my limited knowledge and expertise of matplotlib, I have the following questions and I hope you guys could help me. 1) I tend to use pcolor to draw the colormap in the central area. However, I've seen a lot of examples draw colormap with imshow. What's the difference between pcolor and imshow? Shall I use pcolor or imshow to produce the heatmap in the link above? 2) How to draw the dendrograms on the top and left of the colormap? I got hints from http://matplotlib.sourceforge.net/examples/axes_grid/scatter_hist.html on how to append axes to current plot, but I still have now idea how to draw the dengrograms. 3) How to draw the column side colormap (the smaller one) between the top dendrogram and the big colormap? 4) I can use colorbar to draw a colorbar, but how to place the colorbar on the topleft of the image just as the R heatmap does? 5) Any other suggestions on how to draw the heatmap? Thanks and any help will be greatly appreciated. Regards, Jianfeng
On Sat, Sep 24, 2011 at 3:59 AM, Andreas Matthias <and...@gm...> wrote: > Hmm. I do not get a reversed list of axes. This is the output of > the example code below: > > [<matplotlib.axes.AxesSubplot object at 0x8d8fb4c>, <matplotlib.axes.Axes object at 0x8f633ec>] > [<matplotlib.axes.AxesSubplot object at 0x8d8fb4c>, <matplotlib.axes.Axes object at 0x8f633ec>] This doesn't seem right - for me that code results in: [<matplotlib.axes.AxesSubplot object at 0x16d7de70>, <matplotlib.axes.Axes object at 0x1b77c890>] [<matplotlib.axes.Axes object at 0x1b77c890>, <matplotlib.axes.AxesSubplot object at 0x16d7de70>] can you try explicitly swapping your axes? f.axes = [f.axes[1],f.axes[0]] instead of the call to reverse? > BTW, what's matplotlib.axes.AxesSubplot? I couldn't find this class. see SubplotBase class and subplot_class_factory function in matplotlib/axes.py best, -- Paul Ivanov 314 address only used for lists, off-list direct email at: http://pirsquared.org | GPG/PGP key id: 0x0F3E28F7
Hello, Please consider my attached examples. hw3.py nicely produces multiple axes electromagnetic spectrum with solar and terrestrial radiation plotted using Planck's function. However, the major and minor ticks placements are not nice in those plots and I have decided to use the new axis_grid1 interface. In the original hw3.py I do multiple plots of desired unit (e.g. wavelength to wavenumber etc...) I am quite sure that the units shown in the hw3.py are correctly converted. Now I am planning to produce these conversions with mpl transformations. Then test1-hw3.py comes into view once again. Can someone possibly (JJ) give little hint here as to converting from wavelength to wavenumber using Affine2D and correctly see the ticks located as the main x-axis. I do lots of extra lines to get this one working properly in the hw3.py as shown below: # multi x-axes # first wavenumber in cm^-1 parx = ax1.twiny() parx.axis["top"].set_visible(False) offset = 0, -60 new_axisline = parx.get_grid_helper().new_fixed_axis parx.axis["bottom"] = new_axisline(loc="bottom", axes=parx, offset=offset) parx.axis["bottom"].label.set_visible(True) parx.axis["bottom"].label.set_text(u"Wavenumber, cm−1") parx.axis["bottom"].label.set_fontsize(16) line1, = parx.plot(1/(wavelength[1:]*100), np.ones(len(wavelength[1:]))) line1.set_visible(0) parx.set_xlim(xmin=1e10,xmax=1/1e6) parx.set_xscale('log') Thanks. -- Gökhan
HI modified one of the examples and it brings up the chart window with the custom toolbar. However, nothing happens with the "pickevent" """ This demo demonstrates how to embed a matplotlib (mpl) plot into a PyQt4 GUI application, including: * Using the navigation toolbar * Adding data to the plot * Dynamically modifying the plot's properties * Processing mpl events * Saving the plot to a file from a menu The main goal is to serve as a basis for developing rich PyQt GUI applications featuring mpl plots (using the mpl OO API). Eli Bendersky (el...@gm...) License: this code is in the public domain Last modified: 19.01.2009 """ from __future__ import division import sys, os, random from PyQt4.QtCore import * from PyQt4.QtGui import * import matplotlib from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.backends.backend_qt4agg import NavigationToolbar2QTAgg as NavigationToolbar from matplotlib.figure import Figure import math import os import sys import matplotlib from matplotlib import verbose from matplotlib.backend_bases import cursors from matplotlib.figure import Figure try: from PyQt4 import QtCore, QtGui, Qt except ImportError: raise ImportError("Qt4 backend requires that PyQt4 is installed.") cursord = { cursors.MOVE : QtCore.Qt.SizeAllCursor, cursors.HAND : QtCore.Qt.PointingHandCursor, cursors.POINTER : QtCore.Qt.ArrowCursor, cursors.SELECT_REGION : QtCore.Qt.CrossCursor, } class NavigationToolbarCustom(NavigationToolbar): def __init__(self, *args, **kwargs): pixmap = QtGui.QPixmap() pixmap.load(':/cross.png') cursors.SELECT_POINT = pixmap super(NavigationToolbar, self).__init__(*args, **kwargs) def _init_toolbar(self): self.basedir = os.path.join(matplotlib.rcParams[ 'datapath' ],'images') a = self.addAction(self._icon('home.svg'), 'Home', self.home) a.setToolTip('Reset original view') a = self.addAction(self._icon('back.svg'), 'Back', self.back) a.setToolTip('Back to previous view') a = self.addAction(self._icon('forward.svg'), 'Forward', self.forward) a.setToolTip('Forward to next view') self.addSeparator() a = self.addAction(self._icon('move.svg'), 'Pan', self.pan) a.setToolTip('Pan axes with left mouse, zoom with right') a = self.addAction(self._icon('zoom_to_rect.svg'), 'Zoom', self.zoom) a.setToolTip('Zoom to rectangle') a = self.addAction(self._icon('hand.svg'), 'Select', self.selectPointMode) a.setToolTip('Select the nearest data point') self.addSeparator() a = self.addAction(self._icon('subplots.png'), 'Subplots', self.configure_subplots) a.setToolTip('Configure subplots') a = self.addAction(self._icon('filesave.svg'), 'Save', self.save_figure) a.setToolTip('Save the figure') self.buttons = {} # Add the x,y location widget at the right side of the toolbar # The stretch factor is 1 which means any resizing of the toolbar # will resize this label instead of the buttons. if self.coordinates: self.locLabel = QtGui.QLabel( "", self ) self.locLabel.setAlignment( QtCore.Qt.AlignRight | QtCore.Qt.AlignTop ) self.locLabel.setSizePolicy( QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Ignored)) labelAction = self.addWidget(self.locLabel) labelAction.setVisible(True) # reference holder for subplots_adjust window self.adj_window = None def mouse_move(self, event): print 'mouse_move', event.button if not event.inaxes or not self._active: if self._lastCursor != cursors.POINTER: self.set_cursor(cursors.POINTER) self._lastCursor = cursors.POINTER else: if self._active=='ZOOM': if self._lastCursor != cursors.SELECT_REGION: self.set_cursor(cursors.SELECT_REGION) self._lastCursor = cursors.SELECT_REGION if self._xypress: x, y = event.x, event.y lastx, lasty, a, ind, lim, trans = self._xypress[0] self.draw_rubberband(event, x, y, lastx, lasty) elif (self._active=='PAN' and self._lastCursor != cursors.MOVE): self.set_cursor(cursors.MOVE) self._lastCursor = cursors.MOVE elif self._active=='SELECT': if self._lastCursor != cursors.SELECT_POINT: QtGui.QApplication.restoreOverrideCursor() QtGui.QApplication.setOverrideCursor(QtGui.QCursor(cursors.SELECT_POINT)) self._lastCursor = cursors.SELECT_POINT if event.inaxes and event.inaxes.get_navigate(): try: s = event.inaxes.format_coord(event.xdata, event.ydata) except ValueError: pass except OverflowError: pass else: if len(self.mode): self.set_message('%s : %s' % (self.mode, s)) else: self.set_message(s) else: self.set_message(self.mode) def selectPointMode(self, *args): if self._active == 'SELECT': self._active = None else: self._active = 'SELECT' if self._idPress is not None: self._idPress = self.canvas.mpl_disconnect(self._idPress) self.mode = '' if self._idRelease is not None: self._idRelease = self.canvas.mpl_disconnect(self._idRelease) self.mode = '' if self._active: self._idRelease = self.canvas.mpl_connect( 'button_press_event', self.selectPoint) self.mode = 'pixel select mode' self.canvas.widgetlock(self) else: self.canvas.widgetlock.release(self) self.set_message(self.mode) def selectPoint(self, event): if event.inaxes and event.inaxes.get_navigate(): print 'selectPoint: ', 1 self.xdatastart=event.xdata print 'selectPoint: ', 2 self.ydatastart=event.ydata self.xstart=event.x self.ystart=event.y print 'selectPoint: ', 3 self._banddraw = self.canvas.mpl_connect( 'motion_notify_event',self.drawband) print 'selectPoint: ', 4 self._idRelease = self.canvas.mpl_disconnect(self._idRelease) self._idRelease = self.canvas.mpl_connect( 'button_release_event', self.selectSecondPoint) print 'selectPoint: ', 5 def selectSecondPoint(self, event): if event.inaxes and event.inaxes.get_navigate(): print 'selectSecondPoint: ', 1 self._banddraw=self.canvas.mpl_disconnect(self._banddraw) print 'selectSecondPoint: ', 2 self._idRelease = self.canvas.mpl_disconnect(self._idRelease) print 'selectSecondPoint: ', 3 self._idRelease = self.canvas.mpl_connect( 'button_press_event', self.selectPoint) self.draw_rubberband(event, 0, 0, 0, 0) print 'selectSecondPoint: ', 4 self.emit( QtCore.SIGNAL('pickEvent'), self.xdatastart, self.ydatastart, event.xdata, event.ydata ) print 'selectSecondPoint: ', 5 def drawband(self, event): self.draw_rubberband(event,self.xstart, self.ystart, event.x, event.y) def onPick(self, xstart, ystart, xend, yend): xstart_i, ystart_i = self.getIndices(xstart, ystart) xend_i, yend_i = self.getIndices(xend, yend) if xstart_i > xend_i: xstart_i, xend_i = xend_i, xstart_i if ystart_i > yend_i: ystart_i, yend_i = yend_i, ystart_i try: indices = self.indices[ystart_i:yend_i+1, xstart_i:xend_i+1] print indices self.emit(QtCore.SIGNAL('pickEvent'), indices.flatten()) except TypeError: pass def getIndices(self, xdata, ydata): xIndex = locateClosest(xdata, self.xPixelLocs) yIndex = locateClosest(ydata, self.yPixelLocs) return xIndex, yIndex def locateClosest(point, points): compare = numpy.abs(points-point) return numpy.nonzero(numpy.ravel(compare==compare.min()))[0] class AppForm(QMainWindow): def __init__(self, parent=None): QMainWindow.__init__(self, parent) self.setWindowTitle('Demo: PyQt with matplotlib') self.create_menu() self.create_main_frame() self.create_status_bar() self.textbox.setText('1 2 3 4') self.on_draw() def save_plot(self): file_choices = "PNG (*.png)|*.png" path = unicode(QFileDialog.getSaveFileName(self, 'Save file', '', file_choices)) if path: self.canvas.print_figure(path, dpi=self.dpi) self.statusBar().showMessage('Saved to %s' % path, 2000) def on_about(self): msg = """ A demo of using PyQt with matplotlib: * Use the matplotlib navigation bar * Add values to the text box and press Enter (or click "Draw") * Show or hide the grid * Drag the slider to modify the width of the bars * Save the plot to a file using the File menu * Click on a bar to receive an informative message """ QMessageBox.about(self, "About the demo", msg.strip()) def on_pick(self, event): # The event received here is of the type # matplotlib.backend_bases.PickEvent # # It carries lots of information, of which we're using # only a small amount here. # box_points = event.artist.get_bbox().get_points() msg = "You've clicked on a bar with coords:\n %s" % box_points QMessageBox.information(self, "Click!", msg) def on_draw(self): """ Redraws the figure """ str = unicode(self.textbox.text()) self.data = map(int, str.split()) x = range(len(self.data)) # clear the axes and redraw the plot anew # self.axes.clear() self.axes.grid(self.grid_cb.isChecked()) self.axes.bar( left=x, height=self.data, width=self.slider.value() / 100.0, align='center', alpha=0.44, picker=5) self.canvas.draw() def create_main_frame(self): self.main_frame = QWidget() # Create the mpl Figure and FigCanvas objects. # 5x4 inches, 100 dots-per-inch # self.dpi = 100 self.fig = Figure((5.0, 4.0), dpi=self.dpi) self.canvas = FigureCanvas(self.fig) self.canvas.setParent(self.main_frame) # Since we have only one plot, we can use add_axes # instead of add_subplot, but then the subplot # configuration tool in the navigation toolbar wouldn't # work. # self.axes = self.fig.add_subplot(111) # Bind the 'pick' event for clicking on one of the bars # self.canvas.mpl_connect('pick_event', self.on_pick) self.canvas.mpl_connect('pickevent', self.onPick) # Create the navigation toolbar, tied to the canvas # self.mpl_toolbar = NavigationToolbarCustom(self.canvas, self.main_frame) # Other GUI controls # self.textbox = QLineEdit() self.textbox.setMinimumWidth(200) self.connect(self.textbox, SIGNAL('editingFinished ()'), self.on_draw) self.draw_button = QPushButton("&Draw") self.connect(self.draw_button, SIGNAL('clicked()'), self.on_draw) self.grid_cb = QCheckBox("Show &Grid") self.grid_cb.setChecked(False) self.connect(self.grid_cb, SIGNAL('stateChanged(int)'), self.on_draw) slider_label = QLabel('Bar width (%):') self.slider = QSlider(QtCore.Qt.Horizontal) self.slider.setRange(1, 100) self.slider.setValue(20) self.slider.setTracking(True) self.slider.setTickPosition(QSlider.TicksBothSides) self.connect(self.slider, SIGNAL('valueChanged(int)'), self.on_draw) # # Layout with box sizers # hbox = QHBoxLayout() for w in [ self.textbox, self.draw_button, self.grid_cb, slider_label, self.slider]: hbox.addWidget(w) hbox.setAlignment(w, QtCore.Qt.AlignVCenter) vbox = QVBoxLayout() vbox.addWidget(self.canvas) vbox.addWidget(self.mpl_toolbar) vbox.addLayout(hbox) self.main_frame.setLayout(vbox) self.setCentralWidget(self.main_frame) def create_status_bar(self): self.status_text = QLabel("This is a demo") self.statusBar().addWidget(self.status_text, 1) def create_menu(self): self.file_menu = self.menuBar().addMenu("&File") load_file_action = self.create_action("&Save plot", shortcut="Ctrl+S", slot=self.save_plot, tip="Save the plot") quit_action = self.create_action("&Quit", slot=self.close, shortcut="Ctrl+Q", tip="Close the application") self.add_actions(self.file_menu, (load_file_action, None, quit_action)) self.help_menu = self.menuBar().addMenu("&Help") about_action = self.create_action("&About", shortcut='F1', slot=self.on_about, tip='About the demo') self.add_actions(self.help_menu, (about_action,)) def add_actions(self, target, actions): for action in actions: if action is None: target.addSeparator() else: target.addAction(action) def create_action( self, text, slot=None, shortcut=None, icon=None, tip=None, checkable=False, signal="triggered()"): action = QAction(text, self) if icon is not None: action.setIcon(QIcon(":/%s.png" % icon)) if shortcut is not None: action.setShortcut(shortcut) if tip is not None: action.setToolTip(tip) action.setStatusTip(tip) if slot is not None: self.connect(action, SIGNAL(signal), slot) if checkable: action.setCheckable(True) return action def main(): app = QApplication(sys.argv) form = AppForm() form.show() app.exec_() if __name__ == "__main__": main()
Hi, I'm looking at Darren's example of extending matplotlib's toolbar from 2008. Any ideal where I can find the base class MplToolbar? Can some just help me with figuring out which example in matplotlib 1.01 I should start with to use his cutom ToolBar? http://www.mailinglistarchive.com/html/mat...@li.../2008-11/msg00107.html Here is his custom toolbar: (copied from above link) -------------------------------------------------------------------------------------------------------------------------------------------------------- I have a Toolbar subclass that adds a button to graphically select a subset from the data, its sort of similar to the zoom tool only it doesnt zoom. This is specific to Qt4, but maybe you will find it useful. Toolbar._init_toolbar adds a "Select" action, which is wired so that one corner of a rectangle is defined by the mouse press, the opposite by the mouse release: class Toolbar(MplToolbar): def __init__(self, *args, **kwargs): pixmap = QtGui.QPixmap() pixmap.load(':/cross.png') mplCursors.SELECT_POINT = pixmap super(Toolbar, self).__init__(*args, **kwargs) def _init_toolbar(self): self.basedir = os.path.join(mpl.rcParams[ 'datapath' ],'images') a = self.addAction(self._icon('home.svg'), 'Home', self.home) a.setToolTip('Reset original view') a = self.addAction(self._icon('back.svg'), 'Back', self.back) a.setToolTip('Back to previous view') a = self.addAction(self._icon('forward.svg'), 'Forward', self.forward) a.setToolTip('Forward to next view') self.addSeparator() a = self.addAction(self._icon('move.svg'), 'Pan', self.pan) a.setToolTip('Pan axes with left mouse, zoom with right') a = self.addAction(self._icon('zoom_to_rect.svg'), 'Zoom', self.zoom) a.setToolTip('Zoom to rectangle') a = self.addAction(QtGui.QIcon(':/crosshairs.svg'), 'Select', self.selectPointMode) a.setToolTip('Select the nearest data point') self.addSeparator() a = self.addAction(self._icon('subplots.png'), 'Subplots', self.configure_subplots) a.setToolTip('Configure subplots') a = self.addAction(self._icon('filesave.svg'), 'Save', self.save_figure) a.setToolTip('Save the figure') self.buttons = {} # Add the x,y location widget at the right side of the toolbar # The stretch factor is 1 which means any resizing of the toolbar # will resize this label instead of the buttons. if self.coordinates: self.locLabel = QtGui.QLabel( "", self ) self.locLabel.setAlignment( QtCore.Qt.AlignRight | QtCore.Qt.AlignTop ) self.locLabel.setSizePolicy( QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Ignored)) labelAction = self.addWidget(self.locLabel) labelAction.setVisible(True) # reference holder for subplots_adjust window self.adj_window = None def mouse_move(self, event): #print 'mouse_move', event.button if not event.inaxes or not self._active: if self._lastCursor != mplCursors.POINTER: self.set_cursor(mplCursors.POINTER) self._lastCursor = mplCursors.POINTER else: if self._active=='ZOOM': if self._lastCursor != mplCursors.SELECT_REGION: self.set_cursor(mplCursors.SELECT_REGION) self._lastCursor = mplCursors.SELECT_REGION if self._xypress: x, y = event.x, event.y lastx, lasty, a, ind, lim, trans = self._xypress[0] self.draw_rubberband(event, x, y, lastx, lasty) elif (self._active=='PAN' and self._lastCursor != mplCursors.MOVE): self.set_cursor(mplCursors.MOVE) self._lastCursor = mplCursors.MOVE elif self._active=='SELECT': if self._lastCursor != mplCursors.SELECT_POINT: QtGui.QApplication.restoreOverrideCursor() QtGui.QApplication.setOverrideCursor( QtGui.QCursor(mplCursors.SELECT_POINT)) self._lastCursor = mplCursors.SELECT_POINT if event.inaxes and event.inaxes.get_navigate(): try: s = event.inaxes.format_coord(event.xdata, event.ydata) except ValueError: pass except OverflowError: pass else: if len(self.mode): self.set_message('%s : %s' % (self.mode, s)) else: self.set_message(s) else: self.set_message(self.mode) def selectPointMode(self, *args): if self._active == 'SELECT': self._active = None else: self._active = 'SELECT' if self._idPress is not None: self._idPress = self.canvas.mpl_disconnect(self._idPress) self.mode = '' if self._idRelease is not None: self._idRelease = self.canvas.mpl_disconnect(self._idRelease) self.mode = '' if self._active: self._idRelease = self.canvas.mpl_connect( 'button_press_event', self.selectPoint) self.mode = 'pixel select mode' self.canvas.widgetlock(self) else: self.canvas.widgetlock.release(self) self.set_message(self.mode) def selectPoint(self, event): if event.inaxes and event.inaxes.get_navigate(): self.xdatastart=event.xdata self.ydatastart=event.ydata self.xstart=event.x self.ystart=event.y self._banddraw = self.canvas.mpl_connect( 'motion_notify_event',self.drawband) self._idRelease = self.canvas.mpl_disconnect(self._idRelease) self._idRelease = self.canvas.mpl_connect( 'button_release_event', self.selectSecondPoint) def selectSecondPoint(self, event): if event.inaxes and event.inaxes.get_navigate(): self._banddraw=self.canvas.mpl_disconnect(self._banddraw) self._idRelease = self.canvas.mpl_disconnect(self._idRelease) self._idRelease = self.canvas.mpl_connect( 'button_press_event', self.selectPoint) self.draw_rubberband(event, 0, 0, 0, 0) self.emit( QtCore.SIGNAL('pickEvent'), self.xdatastart, self.ydatastart, event.xdata, event.ydata ) def drawband(self, event): self.draw_rubberband(event,self.xstart, self.ystart, event.x, event.y) The mouse release calls selectSecondPoint, which emits a signal containing the x and y start and end data. That gets routed to the onPick method on my Qt4Canvas instance: def onPick(self, xstart, ystart, xend, yend): xstart_i, ystart_i = self.getIndices(xstart, ystart) xend_i, yend_i = self.getIndices(xend, yend) if xstart_i > xend_i: xstart_i, xend_i = xend_i, xstart_i if ystart_i > yend_i: ystart_i, yend_i = yend_i, ystart_i try: indices = self.indices[ystart_i:yend_i+1, xstart_i:xend_i+1] self.emit(QtCore.SIGNAL('pickEvent'), indices.flatten()) except TypeError: pass which determines the indices of my data that are contained within the region defined by the user: def getIndices(self, xdata, ydata): xIndex = locateClosest(xdata, self.xPixelLocs) yIndex = locateClosest(ydata, self.yPixelLocs) return xIndex, yIndex def locateClosest(point, points): compare = numpy.abs(points-point) return numpy.nonzero(numpy.ravel(compare==compare.min()))[0]
Paul Ivanov wrote: > On Fri, Sep 23, 2011 at 2:08 PM, Andreas Matthias > <and...@gm...> wrote: >> In the following example the coordinates of the mouse >> cursor displayed in the pylab window belong to the >> second y-axis. But I would prefer to have the coordinates >> of the first y-axis to be displayed. Is this possible? > > yes it is. > >> import pylab as mpl >> >> mpl.plot([1,3,2]) >> mpl.twinx() >> mpl.plot([400,50,100]) >> mpl.show() > > # get the current figure > f = mpl.gcf() > > # Hide the "background" for the first axes, otherwise it will block > the second one when we swap > f.axes[0].set_frame_on(False) > > # Swap the axes > f.axes.reverse() > > # Turn on the "background" for the *new* first axes (the one that was > created second) > f.axes[0].set_frame_on(False) Hmm. I do not get a reversed list of axes. This is the output of the example code below: [<matplotlib.axes.AxesSubplot object at 0x8d8fb4c>, <matplotlib.axes.Axes object at 0x8f633ec>] [<matplotlib.axes.AxesSubplot object at 0x8d8fb4c>, <matplotlib.axes.Axes object at 0x8f633ec>] BTW, what's matplotlib.axes.AxesSubplot? I couldn't find this class. Ciao Andreas import pylab as mpl mpl.plot([1,3,2]) mpl.twinx() mpl.plot([400,50,100]) f = mpl.gcf() print f.axes f.axes[0].set_frame_on(False) f.axes.reverse() f.axes[0].set_frame_on(True) print f.axes mpl.show()
Hi Eric, On Wed, Sep 21, 2011 at 9:11 AM, Eric O LEBIGOT (EOL) <Eri...@no...> wrote: > With the Mac OS X backend (at least...), error messages are repeatedly printed > when the mouse leaves the axes rectangle: > > File > "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/backends/backend_macosx.py", > line 420, in draw_rubberband > self.canvas.set_rubberband(x0, y0, x1, y1) > TypeError: integer argument expected, got float > > This problem is annoying because the error messages clutter the terminal, > and useful printed information leaves the screen. :) This problem was fixed by 2c924046 (Jim Radford 2011年03月08日 15:07:23 -0800 459) and now reads: self.canvas.set_rubberband(int(x0), int(y0), int(x1), int(y1)) Please update either that line alone, or checkout the latest matplotlib sources from GitHub. best, -- Paul Ivanov 314 address only used for lists, off-list direct email at: http://pirsquared.org | GPG/PGP key id: 0x0F3E28F7
[Reposting this because it has been "pending" for 2 days] With the Mac OS X backend (at least...), when zooming (with the rubberband rectangle), error messages are repeatedly printed when the mouse leaves (goes outside) the axes rectangle: Traceback (most recent call last): File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/backend_bases.py", line 1625, in motion_notify_event self.callbacks.process(s, event) File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/cbook.py", line 265, in process proxy(*args, **kwargs) File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/cbook.py", line 191, in __call__ return mtd(*args, **kwargs) File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/backend_bases.py", line 2573, in drag_zoom self.draw_rubberband(event, x, y, lastx, lasty) File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/backends/backend_macosx.py", line 420, in draw_rubberband self.canvas.set_rubberband(x0, y0, x1, y1) TypeError: integer argument expected, got float This problem is annoying because the error messages clutter the terminal, and useful printed information leaves the screen. :) Configuration: Mac OS X 10.7, latest MacPort's Python and modules, Matplotlib 1.0.1 with Mac OS X backend. -- View this message in context: http://old.nabble.com/Bug-error-when-zooming-tp32503898p32503898.html Sent from the matplotlib - users mailing list archive at Nabble.com.
Hi Andreas, On Fri, Sep 23, 2011 at 2:08 PM, Andreas Matthias <and...@gm...> wrote: > In the following example the coordinates of the mouse > cursor displayed in the pylab window belong to the > second y-axis. But I would prefer to have the coordinates > of the first y-axis to be displayed. Is this possible? yes it is. > import pylab as mpl > > mpl.plot([1,3,2]) > mpl.twinx() > mpl.plot([400,50,100]) > mpl.show() # get the current figure f = mpl.gcf() # Hide the "background" for the first axes, otherwise it will block the second one when we swap f.axes[0].set_frame_on(False) # Swap the axes f.axes.reverse() # Turn on the "background" for the *new* first axes (the one that was created second) f.axes[0].set_frame_on(False) you can also achieve the same effect by changing the zorder of axes - provided that you remember to have turn the frame on for the one that is the furthest back, and turn it off for all others lying on top of it. You can see what happens if you don't do this by omitting the calls to set_frame_on, and then verifying that the second line does not show up (because the original axes' frame patch is blocking it. best, -- Paul Ivanov 314 address only used for lists, off-list direct email at: http://pirsquared.org | GPG/PGP key id: 0x0F3E28F7
One more update, before heading to the bed. I have managed to adjust my ticks to get what I was asking originally. See the code at http://pastebin.com/XjkDZ486 1-) ax1.yaxis.set_minor_locator(ticker.LogLocator(subs=np.arange(2.0, 10.0)) ) with this line I can get the desired number of minor ticks at the correct positions 2-) #ax1.xaxis.set_ticks(10.**np.arange(np.log10(xmin),np.log10(xmax)+1,1)) this line puts major at every decade but minors aren't printed correctly due to striding at major ticks. 3-) To get this one working I needed to modify the code within the ticker.LogLocator() particularly the two lines starting at https://github.com/matplotlib/matplotlib/blob/master/lib/matplotlib/ticker.py#L1311 decades = np.arange(math.floor(vmin), math.ceil(vmax)+stride, stride) edited to decades = np.arange(math.floor(vmin), math.ceil(vmax)+1, 1) previously I was getting a major tick at every other decade. With this change I get a major tick at every decade plus the minor ticks look nicer. So my opinion is this stride should be parameter to the LogLocator(), so based on what people wants to plot it can be easily adjusted. Any comments/other solutions? Thanks. * * On Fri, Sep 23, 2011 at 10:47 PM, Gökhan Sever <gok...@gm...>wrote: > OK, > > This fixes the minor locations on y-axis > > ax1.yaxis.set_minor_locator(ticker.LogLocator(subs=np.arange(2.0, 10.0))) > > Independent of the data-range. It seems like ticker.LogLocator is trying to > adjust the minor locs internally. > > > On Fri, Sep 23, 2011 at 7:18 PM, Gökhan Sever <gok...@gm...>wrote: > >> Hi, >> >> Another question is, what sets the tick-location on a log scaled axis? >> (that 10^-5, 10^-3, 10^-1, 10^1) It seems as if the range is greater than >> certain value ticks are located this way. Also in a similar way, the >> location of minor ticks are decided. (If the range is big, no minor ticks, >> if the range is not too big, put 4 minor ticks --which is >> very inconvenient to eye, if range is small then nicely locate 9 minor >> ticks.) >> >> Hah, the next probably will be manually forcing the _ticks or ticklocator >> functions. >> >> Anyone else experiencing similar behavior in mpl? >> >> On Fri, Sep 23, 2011 at 1:07 PM, Gökhan Sever <gok...@gm...>wrote: >> >>> Hello, >>> >>> Considering this example plot: >>> http://imageshack.us/photo/my-images/27/imagefki.png/ >>> >>> How can I get the minor ticks showing correctly? (ie., 9 minor ticks per >>> decade likewise for the x-axis) >>> >>> For some reason >>> >>> axis.set_minor_locator(LogLocator(numdecs=9) is not producing the desired >>> output. >>> >>> Any hints? >>> >>> Thanks. >>> >>> -- >>> Gökhan >>> >> >> >> >> -- >> Gökhan >> > > > > -- > Gökhan > -- Gökhan
OK, This fixes the minor locations on y-axis ax1.yaxis.set_minor_locator(ticker.LogLocator(subs=np.arange(2.0, 10.0))) Independent of the data-range. It seems like ticker.LogLocator is trying to adjust the minor locs internally. On Fri, Sep 23, 2011 at 7:18 PM, Gökhan Sever <gok...@gm...> wrote: > Hi, > > Another question is, what sets the tick-location on a log scaled axis? > (that 10^-5, 10^-3, 10^-1, 10^1) It seems as if the range is greater than > certain value ticks are located this way. Also in a similar way, the > location of minor ticks are decided. (If the range is big, no minor ticks, > if the range is not too big, put 4 minor ticks --which is > very inconvenient to eye, if range is small then nicely locate 9 minor > ticks.) > > Hah, the next probably will be manually forcing the _ticks or ticklocator > functions. > > Anyone else experiencing similar behavior in mpl? > > On Fri, Sep 23, 2011 at 1:07 PM, Gökhan Sever <gok...@gm...>wrote: > >> Hello, >> >> Considering this example plot: >> http://imageshack.us/photo/my-images/27/imagefki.png/ >> >> How can I get the minor ticks showing correctly? (ie., 9 minor ticks per >> decade likewise for the x-axis) >> >> For some reason >> >> axis.set_minor_locator(LogLocator(numdecs=9) is not producing the desired >> output. >> >> Any hints? >> >> Thanks. >> >> -- >> Gökhan >> > > > > -- > Gökhan > -- Gökhan
Hi, Another question is, what sets the tick-location on a log scaled axis? (that 10^-5, 10^-3, 10^-1, 10^1) It seems as if the range is greater than certain value ticks are located this way. Also in a similar way, the location of minor ticks are decided. (If the range is big, no minor ticks, if the range is not too big, put 4 minor ticks --which is very inconvenient to eye, if range is small then nicely locate 9 minor ticks.) Hah, the next probably will be manually forcing the _ticks or ticklocator functions. Anyone else experiencing similar behavior in mpl? On Fri, Sep 23, 2011 at 1:07 PM, Gökhan Sever <gok...@gm...> wrote: > Hello, > > Considering this example plot: > http://imageshack.us/photo/my-images/27/imagefki.png/ > > How can I get the minor ticks showing correctly? (ie., 9 minor ticks per > decade likewise for the x-axis) > > For some reason > > axis.set_minor_locator(LogLocator(numdecs=9) is not producing the desired > output. > > Any hints? > > Thanks. > > -- > Gökhan > -- Gökhan
In the following example the coordinates of the mouse cursor displayed in the pylab window belong to the second y-axis. But I would prefer to have the coordinates of the first y-axis to be displayed. Is this possible? import pylab as mpl mpl.plot([1,3,2]) mpl.twinx() mpl.plot([400,50,100]) mpl.show() Ciao Andreas