我使用matplotlib绘制散点图:

并根据matplotlib中的提示使用透明框标记气泡:如何在分散自动放置箭头上注释点?
这是代码:
if show_annote:
for i in range(len(x)):
annote_text = annotes[i][0][0] # STK_ID
ax.annotate(annote_text, xy=(x[i], y[i]), xytext=(-10,3),
textcoords='offset points', ha='center', va='bottom',
bbox=dict(boxstyle='round,pad=0.2', fc='yellow', alpha=0.2),
fontproperties=ANNOTE_FONT)
Run Code Online (Sandbox Code Playgroud)
以及由此产生的情节:

但是仍然存在减少重叠的改进空间(例如标签框偏移固定为(-10,3)).是否有算法可以:
我只是想让人眼看起来很简单,所以有些重叠是可以的,不像http://en.wikipedia.org/wiki/Automatic_label_placement所暗示的那样严格.并且图表中的气泡数量大多数时间都不到150.
我发现所谓的Force-based label placement http://bl.ocks.org/MoritzStefaner/1377729 非常有趣.我不知道是否有任何python代码/包可用于实现该算法.
我不是一个学术人员而且没有寻找最佳解决方案,我的python代码需要标记许多图表,因此速度/内存在考虑范围内.
我正在寻找一种快速有效的解决方案.有关此主题的任何帮助(代码,算法,提示,想法)?谢谢.
我试图标记我从matplotlib创建的散点图/气泡图,其中包含pandas数据框中列的条目.我见过很多相关的例子和问题(参见例如此处和此处).因此我试图相应地注释情节.这是我做的:
import matplotlib.pyplot as plt
import pandas as pd
#example data frame
x = [5, 10, 20, 30, 5, 10, 20, 30, 5, 10, 20, 30]
y = [100, 100, 200, 200, 300, 300, 400, 400, 500, 500, 600, 600]
s = [5, 10, 20, 30, 5, 10, 20, 30, 5, 10, 20, 30]
users =['mark', 'mark', 'mark', 'rachel', 'rachel', 'rachel', 'jeff', 'jeff', 'jeff', 'lauren', 'lauren', 'lauren']
df = pd.DataFrame(dict(x=x, y=y, users=users)
#my attempt to plot …Run Code Online (Sandbox Code Playgroud) 编辑:这个问题不是重复的,我不想绘制数字而不是点,我想在我的点旁边绘制数字。
我正在使用 matplotlib 绘制一个图。需要绘制三个点 [[3,9],[4,8],[5,4]]
我可以轻松地用它们制作散点图
import matplotlib.pyplot as plt
allPoints = [[3,9],[4,8],[5,4]]
f, diagram = plt.subplots(1)
for i in range(3):
xPoint = allPoints[i][0]
yPoint = allPoints[i][1]
diagram.plot(xPoint, yPoint, 'bo')
Run Code Online (Sandbox Code Playgroud)
这产生了这个情节:
我想用数字 1,2,3 标记每个点。
基于这个SO 答案,我尝试使用 annotate 来标记每个点。
import matplotlib.pyplot as plt
allPoints = [[1,3,9],[2,4,8],[3,5,4]]
f, diagram = plt.subplots(1)
for i in range(3):
pointRefNumber = allPoints[i][0]
xPoint = allPoints[i][1]
yPoint = allPoints[i][2]
diagram.annotate(pointRefNumber, (xPoint, yPoint))
Run Code Online (Sandbox Code Playgroud)
这会产生一个空白图。我正在密切关注另一个答案,但它没有产生任何情节。我哪里做错了?
我想制作一个带有几十个点的散点图,这些点可能彼此非常接近.我从问题的答案中尝试了注释方法:
但是当点彼此足够接近时,您可以看到标签/注释重叠.是否有任何库或方法可以生成这样的图,其中各个注释不会相互冲突,也不会与图的边界发生冲突?
import matplotlib.pyplot as plt
z = [0.15, 0.3, 0.45, 0.46, 0.6, 0.75]
y = [2.56422, 3.77284, 3.52623, 3.52623, 3.51468, 3.02199]
n = [58, 651, 393, "393(2)", 203, 123]
fig, ax = plt.subplots()
ax.scatter( z, y )
for i, txt in enumerate( n ):
ax.annotate( txt, ( z[i] + .01, y[i] + .01 ) )
plt.show()Run Code Online (Sandbox Code Playgroud)
如何在Python中绘制一些坐标以及用它编写的相应名称?
假设我们有一些点A(5,3) B(-3,1) C(-6,-4) D(0,-3) E(0,0) F(4,-5)
我想要的情节就像这张照片
我怎样才能做到这一点?
我是 matplotlib 和 numpy 的新手,我正在尝试将一些数组数据绘制为如下所示:
但目前看起来是这样的:
我的代码非常基本,但基本上上面的图片就是我想要做的。我还不太关心绘制网格线,但绘图应该成比例。我在 mathplotlib 网站上查看了一些示例,但找不到足够相似的东西。我想知道 pyplot 是否不是正确的过程,或者我的数组格式是否不正确?
import numpy as np
from matplotlib import pyplot as plt
data = [(2, 2), (3, 2), (4, 1), (4, 0), (3, 0), (3, 1), (4, 2),
(4, 3), (4, 4), (3, 3), (3, 4), (2, 4), (2, 3), (1, 4),
(0, 4), (0, 3), (1, 3), (0, 2), (1, 2), (0, 1), (0, 0),
(1, 0), (1, 1), (2, 0), (2, 1)]
data = np.asarray(data)
print(data)
plt.ylim(0, 4)
plt.xlim(0, …Run Code Online (Sandbox Code Playgroud) 我有一个 nx2 维数组,表示 n 个点及其两个坐标 x、y。使用 pyplot,我想显示我的点的数量 n 而不仅仅是那些无法知道哪个点是什么的点。
我找到了一种方法来记录我的观点,但实际上我想要的只是数字。
我怎样才能做到这一点?
我通过使用variable=plt.scatter(test1,test2)wheretest1和test2are 对应于 x 和 y 的列表制作了一个散点图。
有没有办法用我创建的字符串列表或可变颜色来注释每个点?
我发现:
for i, txt in enumerate(variablelabel):
variable.annotate(txt, (test1[i],test2[i]))
Run Code Online (Sandbox Code Playgroud)
wherevariablelabel定义为我的字符串列表。不幸的是,这似乎并没有注释我的散点图。
或者,我发现您可以使用以下类似的代码添加箭头:
ax.annotate('local max', xy=(2, 1), xytext=(3, 1.5),
arrowprops=dict(facecolor='black', shrink=0.05),
ax.set_ylim(-2,2)
plt.show()
Run Code Online (Sandbox Code Playgroud)
但这会产生我不想要的大箭头。我只想要列表中的字符串。
对不起,如果我不是很清楚。
matplotlib ×8
python ×5
plot ×3
label ×2
scatter-plot ×2
annotate ×1
arrays ×1
drawing ×1
numbers ×1
pandas ×1
point ×1
python-3.x ×1
scatter ×1