如何在matplotlib中移动刻度线的标签?

snake_charmer:

我想沿x轴水平移动一些刻度线的标签,而不移动相应的刻度线。

更具体地说,当使用旋转标签时plt.setp,标签文本的中心与刻度线保持对齐。我想将这些标签向右移动,以使标签的近端对齐,而不是如下图所示。

在此处输入图片说明

我知道这篇文章这一个,但答案很有意思组装机,而不是严格的问题的答案。

我的代码:

import matplotlib.pyplot as plt
import numpy as np
import datetime

# my fake data
dates = np.array([datetime.datetime(2000,1,1) + datetime.timedelta(days=i) for i in range(365*5)])
data = np.sin(np.arange(365*5)/365.0*2*np.pi - 0.25*np.pi) + np.random.rand(365*5) /3

# creates fig with 2 subplots
fig = plt.figure(figsize=(10.0, 6.0))
ax = plt.subplot2grid((2,1), (0, 0))
ax2 = plt.subplot2grid((2,1), (1, 0))
## plot dates
ax2.plot_date( dates, data )

# rotates labels 
plt.setp( ax2.xaxis.get_majorticklabels(), rotation=-45 ) 

# try to shift labels to the right
ax2.xaxis.get_majorticklabels()[2].set_y(-.1)
ax2.xaxis.get_majorticklabels()[2].set_x(10**99)

plt.show()

奇怪的是,它的set_y行为符合预期,但是即使我设置x为幻想,标签也不会移动一个iota。(使用plot_date可能会引起更多的混乱,但实际上确实发生了这种情况plot。)

重要性:

首先,让我们使用mcve来显示问题。

import numpy as np
import datetime
import matplotlib.pyplot as plt
plt.rcParams["date.autoformatter.month"] = "%b %Y"

# my fake data
dates = np.array([datetime.datetime(2000,1,1) + datetime.timedelta(days=i) for i in range(365)])
data = np.sin(np.arange(365)/365.0*2*np.pi - 0.25*np.pi) + np.random.rand(365) /3

# creates fig with 2 subplots
fig, ax = plt.subplots(figsize=(6,2))
## plot dates
ax.plot_date( dates, data )

# rotates labels 
plt.setp( ax.xaxis.get_majorticklabels(), rotation=-45 ) 

plt.tight_layout()
plt.show()

在此处输入图片说明

现在,正如其他答案所指出的那样,您可以使用文本的水平对齐方式。

# rotates labels and aligns them horizontally to left 
plt.setp( ax.xaxis.get_majorticklabels(), rotation=-45, ha="left" )

在此处输入图片说明

您可以使用rotation_mode参数使旋转在文本的左上角发生,在这种情况下,结果会更好一些。

# rotates labels and aligns them horizontally to left 
plt.setp( ax.xaxis.get_majorticklabels(), rotation=-45, ha="left", rotation_mode="anchor") 

在此处输入图片说明

如果这些选项的粒度不够细,即您想更准确地定位标签,例如将标签向侧面移动一些点,则可以使用变换。以下代码将使用a在水平方向上将标签偏移5点matplotlib.transforms.ScaledTranslation

import matplotlib.transforms

plt.setp( ax.xaxis.get_majorticklabels(), rotation=-45) 

# Create offset transform by 5 points in x direction
dx = 5/72.; dy = 0/72. 
offset = matplotlib.transforms.ScaledTranslation(dx, dy, fig.dpi_scale_trans)

# apply offset transform to all x ticklabels.
for label in ax.xaxis.get_majorticklabels():
    label.set_transform(label.get_transform() + offset)

在此处输入图片说明

与@explorerDude提供的解决方案相比,此方法的优点是,偏移量与图形中的数据无关,因此偏移量通常适用于任何绘图,并且对于给定的字体大小,其外观相同。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在matplotlib图中移动线?

Python Matplotlib:如何在保持刻度线的同时显示刻度线标签的特定间隔

如何在ggplot2中移动x轴的刻度线(以年为单位的日期)?

如何在Python(Pandas或matplotlib)的条形图中移动对数轴刻度位置(对于10)

在高图中移动x轴(刻度线,标签和线)

Matplotlib在绘图区域内移动刻度线标签

如何在 matplotlib 中移动轴标签、移动子图和修改轴缩放

如何在geom_tile ggplot中的图块的右/左端移动刻度线和标签?

如何在Matplotlib中的所需位置上移动yaxis(或axis)刻度标签?

如何更正matplotlib图中重叠的刻度线标签?

如何在 matplotlib 中更改对数刻度刻度标签

如何在Matplotlib和Seaborn中的x轴刻度线(不是刻度线标签)和x轴之间添加填充

在d3 js中移动y轴刻度线

如何在python中隐藏刻度线标签,但将刻度线保持在适当的位置?

如何在python中隐藏刻度线标签,但将刻度线保持在适当的位置?

如何在Plotly中允许重复的刻度线标签?

如何在ggplot上“取消挤压”刻度线标签?

如何在matplotlib中的对数轴上设置刻度线

如何在 Matplotlib 中设置月末的刻度线

如何在Vim中移动到标签页进行编辑

在Matplotlib,Ipython中移动x标签

如何在 Gnuplot 中移动和管理 x 刻度与轴的重叠

在matplotlib中移动刺时,如何不“切割” /“展平”线?

Matplotlib:如何在图上方设置刻度标签

如何在matplotlib直方图中显示刻度标签?

如何在matplotlib中为所有水平网格线添加垂直刻度线?

Matplotlib,如何在一侧内部获得刻度线,而在另一侧获得外部刻度线?

matplotlib:在次要标签下绘制主要刻度线标签

如何使刻度线标签更靠近轴?