相关疑难解决方法(0)

如何改进matplotlib散点图(代码,算法,提示)的标签位置?

我使用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)).是否有算法可以:

  1. 根据其邻域的拥挤度动态地改变标签盒的偏移量
  2. 远程动态放置标签框,并在气泡和标签框之间添加箭头线
  3. 有点改变标签的方向
  4. label_box重叠气泡比label_box重叠label_box好吗?

我只是想让人眼看起来很简单,所以有些重叠是可以的,不像http://en.wikipedia.org/wiki/Automatic_label_placement所暗示的那样严格.并且图表中的气泡数量大多数时间都不到150.

我发现所谓的Force-based label placement http://bl.ocks.org/MoritzStefaner/1377729 非常有趣.我不知道是否有任何python代码/包可用于实现该算法.

我不是一个学术人员而且没有寻找最佳解决方案,我的python代码需要标记许多图表,因此速度/内存在考虑范围内.

我正在寻找一种快速有效的解决方案.有关此主题的任何帮助(代码,算法,提示,想法)?谢谢.

label matplotlib

33
推荐指数
3
解决办法
1万
查看次数

如何使用pandas dataframe中的列标记气泡图/散点图?

我试图标记我从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 scatter-plot python-3.x pandas

7
推荐指数
2
解决办法
7067
查看次数

在 matplotlib 散点图中标记点

编辑:这个问题不是重复的,我不想绘制数字而不是点,我想在我的点旁边绘制数字。

我正在使用 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)

这会产生一个空白图。我正在密切关注另一个答案,但它没有产生任何情节。我哪里做错了?

python plot matplotlib

5
推荐指数
2
解决办法
3万
查看次数

Python:在每个数据点处具有对齐注释的散点图

我想制作一个带有几十个点的散点图,这些点可能彼此非常接近.我从问题的答案中尝试了注释方法:

>> matplotlib散点图,每个数据点都有不同的文本

但是当点彼此足够接近时,您可以看到标签/注释重叠.是否有任何库或方法可以生成这样的图,其中各个注释不会相互冲突,也不会与图的边界发生冲突?

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 plot label matplotlib scatter-plot

4
推荐指数
1
解决办法
4935
查看次数

在 Python 中用名称绘制 (x,y) 坐标

如何在Python中绘制一些坐标以及用它编写的相应名称?

假设我们有一些点A(5,3) B(-3,1) C(-6,-4) D(0,-3) E(0,0) F(4,-5)

我想要的情节就像这张照片

在此输入图像描述

我怎样才能做到这一点?

python matplotlib

2
推荐指数
1
解决办法
4160
查看次数

使用 matplotlib 绘制给定笛卡尔坐标的路径

我是 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)

python plot drawing matplotlib

2
推荐指数
1
解决办法
2411
查看次数

使用 pyplot 显示数字而不是点

我有一个 nx2 维数组,表示 n 个点及其两个坐标 x、y。使用 pyplot,我想显示我的点的数量 n 而不仅仅是那些无法知道哪个点是什么的点。

我找到了一种方法来记录我的观点,但实际上我想要的只是数字。

我怎样才能做到这一点?

arrays numbers point matplotlib

1
推荐指数
1
解决办法
6895
查看次数

有没有办法用字符串列表注释散点上的每个点?

我通过使用variable=plt.scatter(test1,test2)wheretest1test2are 对应于 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)

但这会产生我不想要的大箭头。我只想要列表中的字符串。

对不起,如果我不是很清楚。

python annotate scatter matplotlib

1
推荐指数
1
解决办法
7143
查看次数