使用matplotlib添加额外的轴刻度

时间:2013-02-05 20:51:30

标签: python matplotlib

我有一个简单的情节代码

plt.plot(x,y)
plt.show()

我想在x轴上添加一些额外的刻度以及当前的刻度,让我们说

extraticks=[2.1, 3, 7.6]

如你所见,我没有刻度线模式,所以我不想增加整个轴的刻度频率;只保留原始的并加上那些额外的东西......

有可能吗?

此致

2 个答案:

答案 0 :(得分:58)

是的,您可以尝试以下方式:

plt.xticks(list(plt.xticks()[0]) + extraticks)

要使用的功能是xticks()。当不带参数调用时,它返回当前的滴答。使用参数调用它,您可以设置刻度位置和(可选)标签。

答案 1 :(得分:18)

为了完整起见,我想给@Lev-Levitsky的OO版本提供很好的答案:

lines = plt.plot(x,y)
ax = lines[0].axes
ax.set_xticks(list(ax.get_xticks()) + extraticks)

这里我们使用从Axes返回的Lines2D序列中提取的plot对象。通常情况下,如果您使用的是OO界面,则前面会提到Axes,您可以在plot上调用pyplot,而不是lim = ax.get_xlim() ax.set_xticks(list(ax.get_xticks()) + extraticks) ax.set_xlim(lim)

角落警告

如果由于某种原因您修改了轴限制(例如,通过以编程方式放大到部分数据),则需要在此操作后恢复它们:

CGImageSourceRef imageSourceRef = CGImageSourceCreateWithURL((CFURLRef)imageUrl, NULL);

if (!imageSourceRef)
    return;

CFDictionaryRef props = CGImageSourceCopyPropertiesAtIndex(imageSourceRef, 0, NULL);

NSDictionary *properties = (NSDictionary*)CFBridgingRelease(props);

if (!properties) {
    return;
}

NSNumber *height = [properties objectForKey:@"PixelHeight"];
NSNumber *width = [properties objectForKey:@"PixelWidth"];
int height = 0;
int width = 0;

if (height) {
    height = [height intValue];
}
if (width) {
    width = [width intValue];
}

否则,绘图将使x轴显示轴上所有可用的刻度。