繁体   English   中英

我如何在轴上绘图

[英]how can I plot on the axes

我实际上想重新创建如下图像: 在此处输入图片说明

特别是在X轴上的小X我有一个

list = [[100,-3],[200,None],[120,-2] ... ]

而我

for x in list:
     if x[1]!=None:
          plot(x[0],x[1],'ok')
     else:
          ###  PLot on the axes ###

但是当我绘图时,我不知道轴是什么。 我知道有些值是None,例如(250,None),所以我想在x = 250的xax上作图,但我不知道min(ylim())最终将是什么。

我知道我可以做plot(250,-5,'X',zorder=999999)但是只有当我知道最小轴是什么时..( 我不能做最小,最大等才能知道最小轴。因为实际数据是字典中列表内的列表等。

您可以使用clip_on = False选项。 例:

您可以设置y限制。

例:

x = [0,1,2,3,4,5]
y = [0,0,0,0,0,0]

plt.plot(x,y,'x',markersize=20,clip_on=False,zorder=100)
plt.ylim(0,1)
plt.show()

在此处输入图片说明

因此,诀窍是使用自定义转换。 x轴的常规数据转换和y轴的常规数据转换。 Matplotlib称为混合转换,您需要自己创建。 您可以在此很棒的指南中找到更多信息。

正如@ThePredator已经指出的那样,您必须设置clip_on=False ,否则您的标记将被裁剪。

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

fig, ax = plt.subplots()

# the x coords of this transformation are data, and the
# y coord are axes
trans = transforms.blended_transform_factory( ax.transData, ax.transAxes)

# data points on the axes
x = np.random.rand(5)*100. + 200.
y = [0]*5
ax.plot(x, y, 'kx', transform=trans, markersize=10, markeredgewidth=2,
        clip_on=False)

# regular data
x = np.random.rand(5)*100. + 200.
y = np.random.rand(5)*100. + 200.
ax.plot(x, y, 'ro')

plt.show()

结果:

在此处输入图片说明

您可以使用get_ylim()来获取轴的位置,然后在其上绘制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM