使用matplotlib绘制值与字符串的关系?
我正在尝试使用matplotlib创建一个图表,其中x轴的值是整数,而y轴的值是字符串。请问在matplotlib中可以绘制这种类型的数据吗?我查看了文档和图库,但没有找到相关的例子。
我有很多列表,这些列表都绑定在一个叫做my_lists的变量上。它们的结构大致是这样的:
mylists = [765340, 765371, 765310,'MA011',],
[65310, 'MA015'],
[765422, 765422, 24920205, 24920161, 'MA125'],
[765422, 'MA105'],
[765371, 12345, 'MA004']
在每个列表中,除了最后一个项目,其他的都是x轴的值。每个列表的最后一个项目是一个字符串,它是唯一的y轴值。我该如何在matplotlib中绘制这个呢?这是我尝试的代码:
import matplotlib.pyplot as plt
for sub_list in my_lists:
x_value = sub_list[:1]
y_value = sub_list[-1]
plt.plot(x_value, y_value, "ro")
plt.show()
上面的代码给我抛出了这个错误:
ValueError: 无法将字符串转换为浮点数:MA011
那么,整数和字符串该如何绘制呢?
1 个回答
2
你可以试试这样做,给每个y轴的“字符串”一个独特的索引值。可能需要调整一下i的间距,比如用i*2而不是i,这样看起来会更好。之后,你就可以把每个索引的刻度标签设置成对应的字符串。
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(9,7))
ax1 = fig.add_subplot(111)
mylists = [[765340, 765371, 765310,'MA011',], [65310, 'MA015'],
[765422, 765422, 24920205, 24920161, 'MA125'],
[765422, 'MA105'],[765371, 12345, 'MA004']]
x = []
y = []
y_labels = []
y_ticks = []
for i,sub_list in enumerate(mylists):
y_labels.append(sub_list[-1])
y_ticks.append(i)
for v in sub_list[:-1]:
x.append(v)
y.append(i)
ax1.set_yticks(y_ticks)
ax1.set_yticklabels(y_labels)
ax1.plot(x, y, "ro")
plt.show()
编辑:
抱歉,我忘了在for循环中加上enumerate
的调用。这个调用的作用是把i
的值设置为当前子列表的索引。然后你就可以用这个索引代替字符串值作为y轴的值。接下来,你再把这些y轴的标签替换成实际的字符串值。