我对matplotlib很新,我对这个数字有些困难:
我有一个带有x y点组的文本文件,我应该绘制。但是,每个组中的x点重叠,因此我为每个组的每个x轴点添加一个偏移量。
通常,单个组看起来像这样:
请注意,第一张图像中的x轴在第二张图像的x轴开始处结束。
我的问题是结果图像被压制/压缩而不是真正“可读”。
我尝试增加每个组/图像添加到x轴的值,但它只是压缩每个组。
我尝试过使用rcParams
的建议或设置生成图片的dpi
值,但这项工作没有任何作用:
from pylab import rcParams
rcParams['figure.figsize'] = 50, 100
plt.savefig('result.png', dpi=200,pad_inches=5)
我做错了什么或正在寻找什么?
PS:数据和代码为here。要查看我的问题,请致电python2.7 plotit.py text.txt
答案 0 :(得分:2)
如果我理解你的问题,你就不要让你的图像在水平方向上过于压缩。这是因为默认情况下matplotlib
选择填充给定图形大小所需的宽高比。您正在改变figsize
,但是如果您想在rcParams
中更改它,则必须在开始绘图之前将此调用放在处。其他方法是使用无状态API,即fig = plt.figure(figsize=(8,2)); s = fig.add_subplot(111); s.plot(...)
。这就是你得到的:
from pylab import rcParams
rcParams['figure.figsize'] = 8, 2
请注意,我缩小了圆圈尺寸,以使线条更加清晰:
plt.scatter(x,y,s=1)
if px!='':
plt.plot([px,x],[py,y],'-o',markersize=1)
为了更准确的控制,您可以直接设置纵横比:
plt.axes().set_aspect(1)
或使用某些预定义模式,例如
plt.axis('equal')
plt.tight_layout()
编辑:作为参考,最终图片的完整代码:
import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import sys
from pylab import rcParams
rcParams['figure.figsize'] = 8, 2
def parsexydata(fdata):
keys=[]
xy=[]
with open(fdata,'r') as f:
pre=''
for idx, i in enumerate(f.read().replace('\n','').split(',')[2:]):
if idx%2==0:
pre=i
continue
tmp = pre.split('.')
if len(tmp)!=3: continue
[before,key,after] = pre.split('.')
pre = before+'.'+after
if key not in keys: keys.append(key)
xy.append([pre,i,key])
return [xy,keys]
[xydata, keys] = parsexydata(sys.argv[1])
for idx, k in enumerate(keys):
px=py=''
for [x,y,key] in xydata:
if key!=k: continue
x=float(x)+float(k)
if key=='01': print(x)
plt.scatter(x,y,s=1)
if px!='':
plt.plot([px,x],[py,y],'-o',markersize=1)
px,py=x,y
plt.axis('equal')
plt.tight_layout()
plt.savefig('result.png', dpi=200)