[yt-users] custom axes tickmarks projection plot

Gabriel Goodwin ggoodwin52 at gmail.com
Mon Aug 10 12:11:16 PDT 2015


Hi Nathan,

I gave that a try. It does put the tickmarks where I want them. However, I
have to specify the tickmark locations at the end of my projection plot
customization block of code, as shown below, otherwise it has no effect and
the tickmark locations stay default. Calling the function p._setup_plots()
at the end of the code block negates all the prior customizations I made to
the plot, so unfortunately the quick fix doesn't work in this case.

I will file an issue on bitbucket.

Here is my plotting code with your quick fix:

p =
yt.ProjectionPlot(ds,2,string,center=[cent,height,0],width=(wide,height),origin="native",data_source=cut,method='integrate',weight_field='temperature')#,data_source=cut
p.set_log(string,False)
p.set_minorticks(string,'off')
p.set_zlim(string,300,6000) #1E-3,10
p.set_colorbar_label(string, 'Temperature [K]') #'Temperature [K]')
p.set_cbar_minorticks(string,'off')
p.set_cmap(field=string, cmap=mymap) #cmap='kamae_r') #'gray_r')
p.set_buff_size((12000,2696)) #6000,1348
p.set_figure_size('12') #12
p.set_font({'size':12})
p.annotate_timestamp(x_pos=cent-0.55*wide+0.084,y_pos=0.0075,time_format="{time:.4}
{units}",draw_inset_box=True,coord_system='plot',

text_args={'color':'black','weight':'normal','size':10},inset_box_args={'boxstyle':
'square,pad=0.2', 'fc':'white','ec': 'black','alpha': 1.0})
p._setup_plots()
ax = p.plots[string].axes
ax.yaxis.set_ticks([0.00, 0.15, 0.30])# ([0.00, 0.15, 0.30])

Rearranging the code like this gives me the plot I want, but the tickmark
locations stay default:

p =
yt.ProjectionPlot(ds,2,string,center=[cent,height,0],width=(wide,height),origin="native",data_source=cut,method='integrate',weight_field='temperature')#,data_source=cut
p._setup_plots()
ax = p.plots[string].axes
ax.yaxis.set_ticks([0.00, 0.15, 0.30])# ([0.00, 0.15, 0.30])
p.set_log(string,False)
p.set_minorticks(string,'off')
p.set_zlim(string,300,6000) #1E-3,10
p.set_colorbar_label(string, 'Temperature [K]') #'Temperature [K]')
p.set_cbar_minorticks(string,'off')
p.set_cmap(field=string, cmap=mymap) #cmap='kamae_r') #'gray_r')
p.set_buff_size((12000,2696)) #6000,1348
p.set_figure_size('12') #12
p.set_font({'size':12})
p.annotate_timestamp(x_pos=cent-0.55*wide+0.084,y_pos=0.0075,time_format="{time:.4}
{units}",draw_inset_box=True,coord_system='plot',

text_args={'color':'black','weight':'normal','size':10},inset_box_args={'boxstyle':
'square,pad=0.2', 'fc':'white','ec': 'black','alpha': 1.0})

Doing it this way, I get the same error as in my original email:

p =
yt.ProjectionPlot(ds,2,string,center=[cent,height,0],width=(wide,height),origin="native",data_source=cut,method='integrate',weight_field='temperature')#,data_source=cut
p._setup_plots()
p.set_log(string,False)
p.set_minorticks(string,'off')
p.set_zlim(string,300,6000) #1E-3,10
p.set_colorbar_label(string, 'Temperature [K]') #'Temperature [K]')
p.set_cbar_minorticks(string,'off')
p.set_cmap(field=string, cmap=mymap) #cmap='kamae_r') #'gray_r')
p.set_buff_size((12000,2696)) #6000,1348
p.set_figure_size('12') #12
p.set_font({'size':12})
p.annotate_timestamp(x_pos=cent-0.55*wide+0.084,y_pos=0.0075,time_format="{time:.4}
{units}",draw_inset_box=True,coord_system='plot',

text_args={'color':'black','weight':'normal','size':10},inset_box_args={'boxstyle':
'square,pad=0.2', 'fc':'white','ec': 'black','alpha': 1.0})
ax = p.plots[string].axes
ax.yaxis.set_ticks([0.00, 0.15, 0.30])# ([0.00, 0.15, 0.30])


On Mon, Aug 10, 2015 at 2:49 PM, Nathan Goldbaum <nathan12343 at gmail.com>
wrote:

>
>
> On Mon, Aug 10, 2015 at 1:33 PM, Gabriel Goodwin <ggoodwin52 at gmail.com>
> wrote:
>
>> Hello All,
>>
>> Does know how to specify custom tickmark locations for the y axis of a
>> projection plot in the 3.2 release? I was able to do it in 3.1 using the
>> following code:
>>
>> p =
>> yt.ProjectionPlot(ds,2,string,center=[cent,height,0],width=(wide,height),origin="native",data_source=cut,method='integrate',weight_field='temperature')
>> ax = p.plots[string].axes
>> ax.yaxis.set_ticks([0.00, 0.15, 0.30])
>>
>> This would place tickmarks and their labels on the y axis at 0, 0.15, and
>> 0.3.
>>
>> When I try and do this using yt 3.2 I get the following error:
>>
>> AttributeError                            Traceback (most recent call last)<ipython-input-76-6e901a613181> in <module>()     16 ax = p.plots[string].axes---> 17 ax.yaxis.set_ticks([0.00, 0.15, 0.30])
>> AttributeError: 'NoneType' object has no attribute 'yaxis'
>>
>>
> This is due to a performance improvement that was merged in after 3.1 went
> out.  See:
> https://bitbucket.org/yt_analysis/yt/pull-requests/1481/plot-window-performance/diff
>
> The quick fix is to call "p._setup_plots()" before manipulating the axes
> object. The error you're seeing is because we don't actually call out to
> matplotlib anymore until just before the plots need to be created to be
> saved to disk or displayed to a user.
>
> You're definitely not doing anything crazy and the way it works now is
> definitely a bit nonintuitive if you're used to the plots being valid
> immediately after calling ProjectionPlot.
>
> One thing I could see doing is to make sure the plot is created if a user
> *does* actually try to access the axes object. This could be done by making
> the "axes" attribute a property that returns the axes if it's been created
> already or creates the axes if it hasn't yet been created and then returns
> them. That would take a little bit of coding work to get functional.
>
> Please feel free to file an issue about this or take a stab at
> implementing it yourself. I can't guarantee that I'll be able to work on
> this myself on a short timescale, but filing the issue will prevent us from
> forgetting about it.
>
> -Nathan
>
>
>>
>> It appears that we can no longer manipulate the axes object like we were able to in 3.1.
>>
>> Thank you!
>>
>>
>>
>>
>>
>> _______________________________________________
>> yt-users mailing list
>> yt-users at lists.spacepope.org
>> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
>>
>>
>
> _______________________________________________
> yt-users mailing list
> yt-users at lists.spacepope.org
> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.spacepope.org/pipermail/yt-users-spacepope.org/attachments/20150810/db8e83a1/attachment.htm>


More information about the yt-users mailing list