寻找pyplot.plot()的标记文本选项

时间:2014-12-20 06:27:22

标签: python text matplotlib plot markers

我正在寻找一种将数字或文字插入标记的方法。 matplotlib.pyplot.plot(*args, **kwargs)文档中没有任何内容。

默认缩放级别会在边缘放置标记,从而减少用于标记文本的可用空间。

import matplotlib.pyplot as plt
x = [1, 2, 3, 4 ,5]
y = [1, 4, 9, 6, 10]
plt.plot(x, y, 'ro',markersize=23)
plt.show()

3 个答案:

答案 0 :(得分:3)

正如jkalden所说,annotate可以解决你的问题。函数xy - 参数可让您定位文本,以便将其放在标记的位置。

关于你的" zoom"问题,matplotlib默认会在您正在绘制的最小值和最大值之间拉伸帧。它会使您的外部标记的中心位于图形的边缘,并且只有一半标记可见。要覆盖默认的x和y限制,您可以使用set_xlimset_ylim。这里定义了一个偏移量来控制边际空间。

import matplotlib.pyplot as plt

x = [1, 2, 3, 4 ,5]
y = [1, 4, 9, 6, 10]

fig, ax = plt.subplots()

# instanciate a figure and ax object
# annotate is a method that belongs to axes
ax.plot(x, y, 'ro',markersize=23)

## controls the extent of the plot.
offset = 1.0 
ax.set_xlim(min(x)-offset, max(x)+ offset)
ax.set_ylim(min(y)-offset, max(y)+ offset)

# loop through each x,y pair
for i,j in zip(x,y):
    corr = -0.05 # adds a little correction to put annotation in marker's centrum
    ax.annotate(str(j),  xy=(i + corr, j + corr))

plt.show()

以下是它的外观:

Running the suggested code above gives a figure like this.

答案 1 :(得分:1)

这是snake_charmer方法的修订版。我使用对齐选项(而不是手动偏移)将文本放在点上居中,而其他选项则用于颜色,大小和粗体(粗细)。

import matplotlib.pyplot as plt

x = [1, 2, 3, 4 ,5]
y = [1, 4, 9, 6, 10]

fig, ax = plt.subplots()

# instanciate a figure and ax object
# annotate is a method that belongs to axes
ax.plot(x, y, 'ro',markersize=23)

## controls the extent of the plot.
offset = 1.0 
ax.set_xlim(min(x)-offset, max(x)+ offset)
ax.set_ylim(min(y)-offset, max(y)+ offset)

# loop through each x,y pair
for i,j in zip(x,y):
    ax.annotate(str(j),  xy=(i, j), color='white',
                fontsize="large", weight='heavy',
                horizontalalignment='center',
                verticalalignment='center')

plt.show()

numbers on top of dots

答案 2 :(得分:0)

您可以使用MathText进行此操作。 以下是matplotlib.org

中的说明
fig, ax = plt.subplots()
fig.subplots_adjust(left=0.4)

marker_style.update(mec="None", markersize=15)
markers = ["$1$", r"$\frac{1}{2}$", "$f$", "$\u266B$", r"$\mathcal{A}$"]


for y, marker in enumerate(markers):
    # Escape dollars so that the text is written "as is", not as mathtext.
    ax.text(-0.5, y, repr(marker).replace("$", r"\$"), **text_style)
    ax.plot(y * points, marker=marker, **marker_style)
format_axes(ax)
fig.suptitle('mathtext markers', fontsize=14)

plt.show()