我使用以下代码绘制图表:
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轴读取“v +”list1和list2中的值。 所以基本上不是从零开始,我希望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:无法将字符串转换为float。
答案 0 :(得分:1)
您要求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轴,包括"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()
输出与上面的输出基本相同,但它不取决于列表有多少条目,或者它们是否交错。