2017-06-05 179 views
0

问题: 绘制封闭的2D多边形工作正常。 当我尝试绘制它1D(通过用一个常量替换第二个维度)时,它在某些特殊情况下失败:然后多边形(它变成一条线)没有完全绘制。线部分未绘制

我试了一下:

  • 绘制不同的样式像. , o --其中,同时非视距样的风格下工作只有后者重现问题。
  • 移动/滚动多边形阵列,当移动1或2时不起作用,但3和4移动解决了问题。
  • 问了一个无知的朋友^^
  • 通过直接绘制x.min()x.max()之间的一条直线来帮助我自己。
  • 为了简单起见,我删除了z-Data。当绘制与z结合的x时,它也起作用 - 只要z远离恒定。但是,然后我得到一个摇摆的图表,而不是一条直线。

仍然怎么可能,数据是否完全绘制取决于其顺序?我做错了什么? 1-D Polygon plotted with line-style '-' is not completely drawn by pyplot

我试图减少某些特殊情况下的数据,但没有得到很好的结果。 下面是生成图像的工作小例子,对于长数据集感到抱歉,但无法确定在保持问题可重现性的同时删除哪些值。

import numpy as np 
from matplotlib import pyplot as plt 

s = np.array([ 
     [-0.08527125, 0.08810856], 
     [-0.08967261, -0.06748633], 
     [-0.08772675, -0.08396971], 
     [-0.08766724, -0.08440267], 
     [-0.08748191, -0.08521958], 
     [-0.08438602, -0.09529874], 
     [-0.08385044, -0.09684308], 
     [-0.08202714, -0.10180355], 
     [-0.07874478, -0.1066276 ], 
     [-0.07857811, -0.10686354], 
     [-0.07789635, -0.10778213], 
     [-0.07781094, -0.10789337], 
     [-0.07710836, -0.10880646], 
     [-0.07007289, -0.11655674], 
     [-0.06962708, -0.11703841], 
     [-0.06727917, -0.11933749], 
     [-0.06584873, -0.12070607], 
     [-0.06552574, -0.12100522], 
     [-0.06527846, -0.12121293], 
     [-0.06401669, -0.12214381], 
     [-0.06349801, -0.12245992], 
     [-0.06328962, -0.12258028], 
     [-0.0627093 , -0.12290901], 
     [-0.06225359, -0.12314782], 
     [-0.06116991, -0.12368258], 
     [-0.06041895, -0.12403051], 
     [-0.06017477, -0.12413955], 
     [-0.05992829, -0.12424804], 
     [-0.04659197, -0.13006904], 
     [-0.04634663, -0.13017319], 
     [-0.04628731, -0.1301966 ], 
     [-0.04567821, -0.13041967], 
     [-0.04552972, -0.13047215], 
     [-0.04521702, -0.13058213], 
     [-0.00325617, -0.14513102], 
     [ 0.00180445, -0.14683444], 
     [ 0.00950078, -0.14923653], 
     [ 0.01392647, -0.15030046], 
     [ 0.01518804, -0.15045976], 
     [ 0.02734024, -0.15177574], 
     [ 0.02813995, -0.15177997], 
     [ 0.02882764, -0.15176844], 
     [ 0.02947446, -0.15171012], 
     [ 0.03001744, -0.15165147], 
     [ 0.0309922 , -0.15149313], 
     [ 0.03121784, -0.15145567], 
     [ 0.031327 , -0.15143527], 
     [ 0.03142507, -0.15141573], 
     [ 0.03150791, -0.15139799], 
     [ 0.03222764, -0.15124224], 
     [ 0.03798838, -0.14988557], 
     [ 0.038991 , -0.1496481 ], 
     [ 0.0391266 , -0.14961472], 
     [ 0.03920601, -0.14959498], 
     [ 0.03938681, -0.14954736], 
     [ 0.03991586, -0.14940614], 
     [ 0.05465674, -0.14538513], 
     [ 0.05500815, -0.14528457], 
     [ 0.05512499, -0.14524203], 
     [ 0.05522656, -0.14520209], 
     [ 0.05558739, -0.14504381], 
     [ 0.05580602, -0.1449474 ], 
     [ 0.05609256, -0.14478439], 
     [ 0.05713959, -0.14412759], 
     [ 0.05743526, -0.14392656], 
     [ 0.05889567, -0.14277855], 
     [ 0.06059875, -0.14143159], 
     [ 0.06530732, -0.13766523], 
     [ 0.06933674, -0.13424303], 
     [ 0.0702827 , -0.13335664], 
     [ 0.07036637, -0.13327235], 
     [ 0.07405533, -0.12951652], 
     [ 0.07810863, -0.125367 ], 
     [ 0.08087981, -0.12226141], 
     [ 0.08176499, -0.12123622], 
     [ 0.08381519, -0.1150717 ], 
     [ 0.08734418, -0.0927558 ], 
     [ 0.08230393, 0.09131774], 
     [ 0.08183173, 0.097691 ], 
     [ 0.08169106, 0.09931977], 
     [ 0.08130204, 0.10177584], 
     [ 0.07914312, 0.11230088], 
     [ 0.07895476, 0.11316267], 
     [ 0.07514703, 0.12076318], 
     [ 0.07464758, 0.12166996], 
     [ 0.0733333 , 0.12382546], 
     [ 0.07297538, 0.12425848], 
     [ 0.06620658, 0.13199037], 
     [ 0.05294461, 0.14660768], 
     [ 0.05262742, 0.14694802], 
     [ 0.05097036, 0.14849098], 
     [ 0.04972845, 0.14937964], 
     [ 0.04815287, 0.15002114], 
     [ 0.04783434, 0.15013311], 
     [ 0.04757239, 0.15022502], 
     [ 0.02928349, 0.15634586], 
     [ 0.02842644, 0.15662035], 
     [ 0.02776939, 0.15677726], 
     [ 0.0270936 , 0.15690821], 
     [ 0.02666639, 0.15698384], 
     [ 0.02610376, 0.15707915], 
     [ 0.02601474, 0.15709266], 
     [ 0.025126 , 0.15722434], 
     [ 0.02474755, 0.15727606], 
     [ 0.02296123, 0.15742128], 
     [ 0.02202472, 0.15744494], 
     [ 0.02086636, 0.15744469], 
     [ 0.01967163, 0.15742308], 
     [ 0.01872141, 0.15737815], 
     [ 0.01568162, 0.15718458], 
     [-0.00722516, 0.15361993], 
     [-0.00785781, 0.15350418], 
     [-0.02865655, 0.14966376], 
     [-0.02928172, 0.1495445 ], 
     [-0.02970399, 0.14942282], 
     [-0.03124785, 0.14896281], 
     [-0.03160079, 0.14884731], 
     [-0.03311488, 0.14832349], 
     [-0.04643741, 0.14369722], 
     [-0.04831254, 0.14301643], 
     [-0.04846789, 0.14294296], 
     [-0.04902343, 0.14264339], 
     [-0.04980039, 0.14218488], 
     [-0.05127431, 0.14122099], 
     [-0.05343824, 0.13978482], 
     [-0.06641953, 0.1306598 ], 
     [-0.06719992, 0.13009146], 
     [-0.06732267, 0.12997761], 
     [-0.06842394, 0.12872382], 
     [-0.06895024, 0.12808815], 
     [-0.07854825, 0.11574519], 
     [-0.08365013, 0.10504 ], 
     [-0.0837306 , 0.10486896], 
     [-0.08384365, 0.10417084], 
     [-0.08444646, 0.09768441]]) 

# make first and last point the same, to close the circle 
s = np.concatenate([s,s[:1]]) 
y = s[:,0] 
x = s[:,1] 
# plot the polygon xy 
plt.plot(x, y, 'b--', label='Polygon with x/y') 
# plot only x values of the polygon (does not work) 
plt.plot(x, np.zeros(len(x)), 'g-', linewidth=10, label='does not stretch over red dots') 
# do the same, but with dots to show x values (does work) 
plt.plot(x, np.zeros(len(x)), 'r.') 
# do the same, a little bit lower, but with shifted/rolled x values. 
# rolled by 1 or 2 does not help, but by 3 or 4 does. 
plt.plot(np.roll(x,3), np.ones(len(x))-1.02, '-', color="lightgreen", linewidth=10, label="stretches over red dots") 
# do the same again with dots to show x values 
plt.plot(np.roll(x,3), np.ones(len(x))-1.02, 'r.') 
plt.legend(loc='lower center').get_frame().set_alpha(1) 
plt.show() 

Python 3.5 x64通过Windows10中的Anaconda。 Matplotlib是v2.0.0

回答

1

0毫米宽的游泳池有多长时间?从理论上讲,它有一定的长度,但实际上你无法衡量它。同样的情况发生在这里,一个维度上没有扩展的多边形可能会被渲染到任何长度。并且您会看到两个多边形都会发生相同的效果,具体取决于数字大小,缩放级别和轴范围。

我想你已经找到了解决办法,通过绘制一条线而不是一个多边形。这也是我的建议。

+0

我明白你的观点,但无法理解它是如何应用于此的。 正在绘制一系列与绘制一系列线条不同的多边形线条吗?如果我不关闭线来形成一个多边形('s = np.concatenate([s,s [:1]])'),而是保留'min()!= max()',它会显示同样的行为。 – nitzel

+0

我同意这很奇怪,但如果对值plt.plot(np.sort(x),np.zeros(len(x))进行排序,它也可以正常工作。 – ImportanceOfBeingErnest

+0

是的,尽管绘制的线条排序是(内部)与未排序的非常不同 - 反正,它们应该在视觉上难以区分 我会让问题再公开几天,可能会出现一个pyplotguru,告诉我们在matplotlib中有一个特殊的修剪算法恶毒地解剖我的图表;) – nitzel