我是python的新手,我试图以间隔的形式在一个轴X上绘制一些情侣(x,y)。例如,如果我有以下夫妻(2,3),(2,4),(4,4),(1,3),我应该在下图中生成图表。
我尝试了这段代码,但它没有给我正确的结果
def DrawGraph (RM):
for i in range(0,RM.shape[0]-1):
c1=lastOne2(RM,i)
ax1=plt.subplot(1,1,1)
if c1[0] == c1[1]:
plt.plot(c1[0],c1[1],'ro')
if c1[0] < c1[1]:
ax1.barh(c1[0], c1[1], height=0.05)
if c1[0] > c1[1]:
ax1.barh(c1[1], c1[0], height=0.05)
return plt
答案 0 :(得分:0)
因此我不确定您使用barh
的原因。我认为使用法线并创建一些y值更简单。除此之外,这应该得到你想要的。请注意,您可以通过plt.plot
指定kwargs
的任何关键字参数。此外,deltaY
可以调整水平线分开的距离。
# Import
import matplotlib.pyplot as plt
import numpy as np
def DrawGraph(RM,deltaY=1,**kwargs):
# Create figure
ax=plt.subplot(1,1,1)
for i in range(0,RM.shape[0]):
# Grab current interval
c1=RM[i]
# Create y-values and shift intervals up by (i+1)*deltaY
y=(i+1)*deltaY*np.ones((2,1))
# Draw
if c1[0] == c1[1]:
ax.plot([c1[0]],[i*deltaY],'o',**kwargs)
if c1[0] < c1[1]:
ax.plot(c1,y,**kwargs)
if c1[0] > c1[1]:
ax.plot(c1,y,lw=lw,**kwargs)
# Set ylim so it looks nice
ax.set_ylim([0,deltaY*(i+2)])
return ax
# Define intervals
intervals=np.array([(2,3),(2,4),(4,4),(1,3)])
# Plot
DrawGraph(intervals,lw=5,c='b')
# Draw
plt.show()
这会让你
答案 1 :(得分:0)