如何将Matplotlib绘制的图表形状修改为圆形?
如何把Matplotlib图表改成圆形外观
我已经用Matplotlib画出了功能正常的图表,但想把它的外观改成圆形。当前的绘图代码如下:
import matplotlib.pyplot as plt fig = plt.figure(figsize=(5,5), dpi=300) ax = fig.add_axes([0,0,1,1]) ax.plot(30, 80, marker="o", markersize=20, markeredgecolor="#ed6033", markerfacecolor="#ed6033") ax.spines['left'].set_position('center') ax.spines['bottom'].set_position('center') ax.spines['right'].set_color('none') ax.spines['top'].set_color('none') ax.xaxis.set_ticks_position('bottom') ax.yaxis.set_ticks_position('left') ax.set_facecolor('#8cc9e2') ax.margins(0.1) plt.setp(ax.get_xticklabels()[4], visible=False) plt.xlim(10, 90) plt.ylim(10, 90) plt.grid(color='white') plt.show()
当前的输出是方形图表:
想要的目标效果是圆形图表:
修改方案
要实现圆形外观,核心是让坐标轴显示区域被裁剪成圆形,同时保证xy轴比例一致,避免变形。直接修改代码如下:
import matplotlib.pyplot as plt from matplotlib.patches import Circle fig = plt.figure(figsize=(5,5), dpi=300) ax = fig.add_axes([0,0,1,1]) ax.plot(30, 80, marker="o", markersize=20, markeredgecolor="#ed6033", markerfacecolor="#ed6033") # 保持原有的坐标轴设置 ax.spines['left'].set_position('center') ax.spines['bottom'].set_position('center') ax.spines['right'].set_color('none') ax.spines['top'].set_color('none') ax.xaxis.set_ticks_position('bottom') ax.yaxis.set_ticks_position('left') ax.set_facecolor('#8cc9e2') # 关键1:设置xy轴等比例,防止圆形被拉伸 ax.set_aspect('equal') # 关键2:创建圆形裁剪路径,覆盖10-90的坐标范围 circle = Circle((50, 50), 40, transform=ax.transData) ax.set_clip_path(circle) # 保持原有的刻度和范围设置 plt.setp(ax.get_xticklabels()[4], visible=False) plt.xlim(10, 90) plt.ylim(10, 90) plt.grid(color='white') plt.show()
关键改动说明
ax.set_aspect('equal'):强制xy轴的单位长度一致,确保圆形不会因为图表比例变成椭圆Circle((50,50),40):以坐标轴中心(50,50)为圆心,半径40刚好覆盖你设置的10-90坐标范围ax.set_clip_path(circle):用这个圆形作为裁剪边界,只显示圆形内部的图表内容
内容的提问来源于stack exchange,提问作者sam
相关产品推荐
相关产品推荐

