我正在尝试制作散点图,并从列表中标注不同数字的数据点。 举个例子,我想画出y和x,并用n中对应的数字标注。
y = [2.56422, 3.77284, 3.52623, 3.51468, 3.02199]
z = [0.15, 0.3, 0.45, 0.6, 0.75]
n = [58, 651, 393, 203, 123]
ax = fig.add_subplot(111)
ax1.scatter(z, y, fmt='o')
什么好主意吗?
我正在尝试制作散点图,并从列表中标注不同数字的数据点。 举个例子,我想画出y和x,并用n中对应的数字标注。
y = [2.56422, 3.77284, 3.52623, 3.51468, 3.02199]
z = [0.15, 0.3, 0.45, 0.6, 0.75]
n = [58, 651, 393, 203, 123]
ax = fig.add_subplot(111)
ax1.scatter(z, y, fmt='o')
什么好主意吗?
当前回答
我不知道任何绘图方法,它接受数组或列表,但你可以使用注释(),而迭代在n的值。
import matplotlib.pyplot as plt
y = [2.56422, 3.77284, 3.52623, 3.51468, 3.02199]
z = [0.15, 0.3, 0.45, 0.6, 0.75]
n = [58, 651, 393, 203, 123]
fig, ax = plt.subplots()
ax.scatter(z, y)
for i, txt in enumerate(n):
ax.annotate(txt, (z[i], y[i]))
注释()有很多格式化选项,请参阅matplotlib网站:
其他回答
对于有限的值集,matplotlib很好。但是当你有很多值时,工具提示开始与其他数据点重叠。但由于空间有限,你不能忽略这些值。因此,最好是缩小或放大。
使用图
import plotly.express as px
import pandas as pd
df = px.data.tips()
df = px.data.gapminder().query("year==2007 and continent=='Americas'")
fig = px.scatter(df, x="gdpPercap", y="lifeExp", text="country", log_x=True, size_max=100, color="lifeExp")
fig.update_traces(textposition='top center')
fig.update_layout(title_text='Life Expectency', title_x=0.5)
fig.show()
您也可以使用pyplot。文本(见这里)。
def plot_embeddings(M_reduced, word2Ind, words):
"""
Plot in a scatterplot the embeddings of the words specified in the list "words".
Include a label next to each point.
"""
for word in words:
x, y = M_reduced[word2Ind[word]]
plt.scatter(x, y, marker='x', color='red')
plt.text(x+.03, y+.03, word, fontsize=9)
plt.show()
M_reduced_plot_test = np.array([[1, 1], [-1, -1], [1, -1], [-1, 1], [0, 0]])
word2Ind_plot_test = {'test1': 0, 'test2': 1, 'test3': 2, 'test4': 3, 'test5': 4}
words = ['test1', 'test2', 'test3', 'test4', 'test5']
plot_embeddings(M_reduced_plot_test, word2Ind_plot_test, words)
作为一个使用列表理解和numpy的一行程序:
(ax。注释(x [0] (x[1],[2]))的x np.array ([n, z, y]) .T]
设置与Rutger的答案相同。
当您需要在不同的时间单独注释时(我的意思是,不是在单个for循环中),这可能很有用。
ax = plt.gca()
ax.annotate('your_lable', (x,y))
其中x和y是你的目标坐标类型是float/int。
Python 3.6 +:
coordinates = [('a',1,2), ('b',3,4), ('c',5,6)]
for x in coordinates: plt.annotate(x[0], (x[1], x[2]))