我正在尝试制作一个“点数图表”(point and figure chart)。我可以在终端上打印出它,但我想用matplotlib进行图形化呈现。最好的方式是什么?我想使用scatter函数,但这样会使列分得太开了。我希望能获得与我提供链接中的图表非常相似的效果,其中列尽可能地靠近彼此。是否有一个参数可以被覆盖以强制执行这个效果?这是我第一次使用matplotlib,请原谅我如果这很琐碎。谢谢。
我正在尝试制作一个“点数图表”(point and figure chart)。我可以在终端上打印出它,但我想用matplotlib进行图形化呈现。最好的方式是什么?我想使用scatter函数,但这样会使列分得太开了。我希望能获得与我提供链接中的图表非常相似的效果,其中列尽可能地靠近彼此。是否有一个参数可以被覆盖以强制执行这个效果?这是我第一次使用matplotlib,请原谅我如果这很琐碎。谢谢。
s
parameter来调整散点图中使用的符号的大小。您还可能需要调整图形的大小(使用figsize)或轴的尺寸(使用add_axes)。这是因为散点图的符号是正方形,以显示单位为单位,而x和y轴没有自动调整,使得一个变化的宽度=一个框的高度。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()
我个人没有经验,但也许可以尝试使用这里的set_view_interval()或set_data_interval()函数?我曾在一个项目中使用过Matplotlib,但没有涉及到调整x轴宽度的问题。
修改颜色是我所能做的最好的。
chgStart = START
colors=['red','black','green','blue']
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, color = colors[int(sign(chg))] ) #<----- control size of scatter symbol