1

我使用以下代码绘制图表:

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(t_list,list1,linestyle='-')
ax.plot(t_list,list2,linestyle='--')
plt.show()  

出现在 y 轴上的值是来自 list1 和 list2 的值。

我试图让我的 y 轴从变量 v 开始,以便 y 轴读取 list1 和 list2 中的值“v +”。所以基本上不是从零开始,我希望 y 轴从“v”开始,然后是列表中的“v +”值。

这是可能的,因为我在同一个图表上绘制了两个不同的列表?

我尝试了什么:

在调用绘图函数之前,我尝试更改 y_ticks:

fig = plt.figure()
ax = fig.add_subplot(111)
y_ticks1 = ["v + " + str(y) for y in list1]
y_ticks2 = ["v + " + str(y) for y in list2]
ax.plot(t_list,y_ticks1,linestyle='-')
ax.plot(t_list,y_ticks2,linestyle='--')
plt.show()  

这会导致 valueError: could not convert string to float。

4

1 回答 1

2

您要求 matplotlib 在图中绘制一个字符串"v + 10"。这就像问“abracadabra”在数字线上的哪个位置——这是不可能的。也就是说,您需要返回初始代码并自己绘制列表。至于刻度,你可以设置它们

ax.set_yticks(list1+list2)
ax.set_yticklabels([ "v + " + str(y) for y in list1+list2])

完整示例:

import matplotlib.pyplot as plt

t_list = [1,2,3]
list1 = [1,2,3]
list2 = [4,5,6]

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(t_list,list1,linestyle='-')
ax.plot(t_list,list2,linestyle='--')

ax.set_yticks(list1+list2)
ax.set_yticklabels([ "v + " + str(y) for y in list1+list2])
plt.show() 

在此处输入图像描述

另一个更通用的选项是对 y 轴使用 Formatter,其中包括"v + ".

ax.yaxis.set_major_formatter(StrMethodFormatter("v + {x}"))

完整示例:

import matplotlib.pyplot as plt
from matplotlib.ticker import StrMethodFormatter

t_list = [1,2,3]
list1 = [1,2,3]
list2 = [4,5,6]

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(t_list,list1,linestyle='-')
ax.plot(t_list,list2,linestyle='--')

ax.yaxis.set_major_formatter(StrMethodFormatter("v + {x}"))

plt.show()  

输出与上面基本相同,但它不取决于列表有多少条目,或者它们是否交错。

于 2017-10-01T20:31:52.343 回答