Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 尝试使用annotate()方法时Matplotlib显示错误?_Python_Matplotlib_Plot - Fatal编程技术网

Python 尝试使用annotate()方法时Matplotlib显示错误?

Python 尝试使用annotate()方法时Matplotlib显示错误?,python,matplotlib,plot,Python,Matplotlib,Plot,我正在尝试使用matplotlib.plt通过post vbyp列表打印视图 并使用名称列表在每个点添加文本。但是,注释函数始终显示错误: x, y = xytext TypeError: 'float' object is not iterable 为了纠正它,我使用了范围方法,但它没有纠正它 import matplotlib.pyplot as plt names = ['S','Deuk','Cip','Pubt','Adoct','Vsa','Rener', 'Gols','OYO

我正在尝试使用matplotlib.plt通过post vbyp列表打印视图 并使用名称列表在每个点添加文本。但是,注释函数始终显示错误:

x, y = xytext
TypeError: 'float' object is not iterable
为了纠正它,我使用了范围方法,但它没有纠正它

import matplotlib.pyplot as plt

names = ['S','Deuk','Cip','Pubt','Adoct','Vsa','Rener',
'Gols','OYO','Qum','Sre','Mey','Micft',
'Nia','Tco','Texments','Fidty','Jrgan','Adoch','MyKa','Dw','Ba','HL','Nx','Towerch','Uer']
posts = [6,3,4,4,6,3,3,8,7,2,15,4,5,5,2,2,2,5,3,2,2,3,4,1,1,1]
views =[554,1272,257,197,545,170,162,18465,419,107,931,1140,438,15626,72,104,219,336,217,1527,278,122,252,56,62,62]
vbyp = []
for i in range(len(posts)):
    vbyp.append(views[i]/posts[i])
plt.plot(vbyp)
for i in range(len(vbyp)):
    plt.annotate(names[i],vbyp[i])
plt.show()
如果没有注释,我会得到如下图像:


但是我想要这样的东西:

有两种可能将您的名字与相应的值关联起来。你必须自己选择你最喜欢的

第一:正确使用你的方法,这会产生不太好的效果。在annotate中,您必须指定字符串名[i]和x,y坐标,到目前为止,您只提供了一个数字

fig = plt.figure(figsize=(9,5))    

# Your code here
for i in range(len(vbyp)):
    plt.annotate(names[i],(i, vbyp[i]))
输出

第二:使用名称作为x-tick标签,可以生成更好、可读性更好的绘图

plt.xticks(range(25), names, rotation=45)
输出


您需要正确使用注释。例如,要在平面上定位图元,需要两个坐标,通常称为x和y。您需要将这两个坐标作为元组或列表提供给注释的xy参数。这里您只提供一个号码。另外,您能告诉我们您想把名字放在哪里吗?是否希望它们作为x轴上的x记号标签?我想你想要的是plt。谢谢你的帮助:@KartikeySingh:很高兴能帮忙。不客气