我正在尝试在matplotlib中创建一个绘图,其中x值是整数,y值是字符串。是否可以在matplotlib中绘制此类数据?我检查了matplotlib的文档和gallery,找不到这种类型的例子。
我有许多列表绑定到名为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:无法将字符串转换为float:MA011
如何绘制整数与字符串?
答案 0 :(得分:2)
你可能会做这样的事情,你给每个y“字符串”一个唯一的索引值。你可能不得不为i调整间距。 IE浏览器。我* 2而不是我让事情看起来不错。之后,将每个索引的tick标签设置为相应的字符串。
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循环中加入enuemrate
来电。它基本上将i
的值设置为当前sub_list的索引。然后使用索引而不是字符串值作为y值。之后,将这些y值的标签替换为实际的字符串值。