On 01/22/2011 05:16 PM, Paul Ivanov wrote:
> Paul Ivanov, on 2011-01-22 18:28,  wrote:
>> Ilya Shlyakhter, on 2011-01-22 19:06,  wrote:
>>> Is it possible to create a "break" in the y-axis so that it has ticks
>>> for value 0-.2, then ticks for values .8-1.0, but devotes only a token
>>> amount of space to the area 0.2-0.8?
>>> I have a dataset with most datapoints in 0-.2 and a couple in .8-1.0,
>>> and none in .2-.8 .   The default scaling wastes a lot of space and
>>> compresses the data in the 0-.2 range
>>> such that it is hard to distinguish.
>>
>> Hi Ilya,
>>
>> this...

Paul,

Your example below is nice, and this question comes up quite often.  If 
we don't already have a gallery example of this, you might want to add 
one.  (Probably better to use deterministic fake data rather than random.)

Eric

>>
>>> p.s. I know I could use two y-axes with different scales; but this
>>> would require splitting the data into two different datasets as well,
>>> and would not allow connecting all points
>>> with one line.
>>
>> ... is the way I'd proceed, because it's clean, and requires the
>> least amount of work.  Connecting your lines across such breaks
>> is misleading - since the magnitude of the slope of the
>> connecting line segment arbitrary relative to all other line
>> segments. You don't actually have to divide your data, you can
>> just replot *all* data on the secondary plot, and then set the x
>> and y lims to break up your views on the data. I'm attaching a
>> quick sketch of what that would look like. (Note how different
>> the outlier line segments would look if we connected them in the
>> same manner that all other points are connected).
>>
>>    import numpy as np
>>    import matplotlib.pylab as plt
>>    pts = np.random.rand(30)*.2
>>    pts[[7,11]] += .8
>>    f,(ax,ax2) = plt.subplots(2,1,sharex=True)
>>
>>    ax.plot(pts)
>>    ax2.plot(pts)
>>    ax.set_ylim(.78,1.)
>>    ax2.set_ylim(0,.22)
>>
>>    ax.xaxis.tick_top()
>>    ax.spines['bottom'].set_visible(False)
>>    ax.tick_params(labeltop='off')
>>    ax2.xaxis.tick_bottom()
>>    ax2.spines['top'].set_visible(False)
>>
>> If this is something you really want, though, you can achieve it
>> by making your own projection/scale:
>> http://matplotlib.sourceforge.net/devel/add_new_projection.html
>>
>> Yet another way would be to re-label the tick lines (e.g. make .6
>> label be 1.0 and subtract that offset from your two outliers.
>
> forgot the attachment, here it is.
>
>
>
>
> ------------------------------------------------------------------------------
> Special Offer-- Download ArcSight Logger for FREE (a $49 USD value)!
> Finally, a world-class log management solution at an even better price-free!
> Download using promo code Free_Logger_4_Dev2Dev. Offer expires
> February 28th, so secure your free ArcSight Logger TODAY!
> http://p.sf.net/sfu/arcsight-sfd2d
>
>
>
> _______________________________________________
> Matplotlib-users mailing list
> Matplotlib-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users


------------------------------------------------------------------------------
Special Offer-- Download ArcSight Logger for FREE (a $49 USD value)!
Finally, a world-class log management solution at an even better price-free!
Download using promo code Free_Logger_4_Dev2Dev. Offer expires 
February 28th, so secure your free ArcSight Logger TODAY! 
http://p.sf.net/sfu/arcsight-sfd2d
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to