python - 使用 matplotlib 绘制点数图

标签 python matplotlib

我正在尝试制作 point and figure chart .我可以让它在终端上打印出来,但我想用 matplotlib 绘制它。做这样的事情最好的方法是什么?我在想分散,但是当我这样做时,列分散得太远了。我想从我提供的链接中获得与图表非常相似的内容,其中各列尽可能彼此靠近。有没有我可以覆盖的参数来强制执行此操作?第一次使用 matplotlib,所以如果这是微不足道的,请原谅。谢谢。

最佳答案

您可以通过选择 s parameter 来调整散点图中使用的符号的大小.您可能还需要调整图形的大小(使用 figsize )或轴的尺寸(使用 add_axes )。这是因为散点的符号是方形的,以显示单位表示,并且不会自动调整 x 轴和 y 轴,因此 width-of-one-change = height-of-one-box。

换句话说,您提供的示例是一个高度 > 宽度的矩形图,并且选择高度和宽度以使一次更改的宽度 == 一次框的高度。

下面是应用这些技术的示例:

import matplotlib.pyplot as plt

BOX = 5
START = 365
changes = (8, -3, 4, -4, 12, -3, 7, -3, 5, -9, 3)

# one way to force dimensions is to set the figure size:
fig = plt.figure(figsize=(5, 10))

# another way is to control the axes dimensions
# for axes to have specific dimensions:
#                  [ x0,  y0,   w,   h]  in figure units, from 0 to 1
#ax = fig.add_axes([.15, .15, .7*.5, .7])
ax = fig.add_axes([.15, .15, .7, .7])

def sign(val):
    return val / abs(val)

pointChanges = []
for chg in changes:
    pointChanges += [sign(chg)] * abs(chg)

symbol = {-1:'o',
           1:'x'}

chgStart = START
for ichg, chg in enumerate(changes):
    x = [ichg+1] * abs(chg)
    y = [chgStart + i * BOX * sign(chg) for i in range(abs(chg))] 
    chgStart += BOX * sign(chg) * (abs(chg)-2)
    ax.scatter(x, y,
               marker=symbol[sign(chg)],
               s=175)   #<----- control size of scatter symbol

ax.set_xlim(0, len(changes)+1)
fig.savefig('pointandfigure.png')
plt.show()

为每个散点图开发的方法非常老套,但关键是我需要使用散点图 s 参数和图形大小来获得所需的效果。

结果图是:

enter image description here

理想情况下,可以创建一个仿照分散方法的自定义方法。它将创建一个自定义 Collection instance这将包括 x、o 和月份标签。它还将 a) 自动调整轴/图形方面或 b) 制作不对称符号。这显然是一个高级选项,适用于希望作为开发人员为 Matplotlib 项目做出贡献的人。

关于python - 使用 matplotlib 绘制点数图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8750648/

相关文章:

python - 通过PID找到python运行脚本

python - 如何在 Python 3.1 中安装 argparse?

python - 类型错误 : __init__() got an unexpected keyword argument 'gridspec_kw'

python - 动画改变点之间的线条数量 - Python

python - 如何在 matplotlib 中并排绘制堆叠直方图?

python - 单词之间的删除距离

python - 如何使用 scapy 模块发送请求并接受三个答案?

python - 如何在控制台中使输入文本加粗?

matplotlib - Jupyter 中的 Mathjax/Matplotlib 字体

python-3.x - Matplotlib 图形注释在窗口之外