Hiding axis text in matplotlib plots

匿名 (未验证) 提交于 2019-12-03 02:11:02

问题:

I'm trying to plot a figure without tickmarks or numbers on either of the axes (I use axes in the traditional sense, not the matplotlib nomenclature!). An issue I have come across is where matplotlib adjusts the x(y)ticklabels by subtracting a value N, then adds N at the end of the axis.

This may be vague, but the following simplified example highlights the issue, with '6.18' being the offending value of N:

import matplotlib.pyplot as plt import random prefix = 6.18  rx = [prefix+(0.001*random.random()) for i in arange(100)] ry = [prefix+(0.001*random.random()) for i in arange(100)] plt.plot(rx,ry,'ko')  frame1 = plt.gca() for xlabel_i in frame1.axes.get_xticklabels():     xlabel_i.set_visible(False)     xlabel_i.set_fontsize(0.0) for xlabel_i in frame1.axes.get_yticklabels():     xlabel_i.set_fontsize(0.0)     xlabel_i.set_visible(False) for tick in frame1.axes.get_xticklines():     tick.set_visible(False) for tick in frame1.axes.get_yticklines():     tick.set_visible(False)  plt.show() 

The three things I would like to know are:

  1. How to turn off this behaviour in the first place (although in most cases it is useful, it is not always!) I have looked through matplotlib.axis.XAxis and cannot find anything appropriate

  2. How can I make N disappear (i.e. X.set_visible(False))

  3. Is there a better way to do the above anyway? My final plot would be 4x4 subplots in a figure, if that is relevant.

回答1:

Instead of hiding each element, you can hide the whole axis:

frame1.axes().get_xaxis().set_visible(False) frame1.axes().get_yaxis().set_visible(False) 

Or, you can set the ticks to an empty list:

frame1.axes().get_xaxis().set_ticks([]) frame1.axes().get_yaxis().set_ticks([]) 

In this second option, you can still use plt.xlabel() and plt.ylabel() to add labels to the axes.



回答2:

If you want to hide just the axis text keeping the grid lines:

frame1 = plt.gca() frame1.axes.xaxis.set_ticklabels([]) frame1.axes.yaxis.set_ticklabels([]) 

Doing set_visible(False) or set_ticks([]) will also hide the grid lines.



回答3:

If you are like me and don't always retrieve the axes, ax, when plotting the figure, then a simple solution would be to do

plt.xticks([]) plt.yticks([]) 


回答4:

Somewhat of an old thread but, this seems to be a faster method using the latest version of matplotlib:

set the major formatter for the x-axis

ax.xaxis.set_major_formatter(plt.NullFormatter()) 


回答5:

I was not actually able to render an image without borders or axis data based on any of the code snippets here (even the one accepted at the answer). After digging through some API documentation, I landed on this code to render my image

plt.axis('off') plt.tick_params(axis='both', left='off', top='off', right='off', bottom='off', labelleft='off', labeltop='off', labelright='off', labelbottom='off') plt.savefig('foo.png', dpi=100, bbox_inches='tight', pad_inches=0.0) 

I used the tick_params call to basically shut down any extra information that might be rendered and I have a perfect graph in my output file :). Hope this helps!



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!