Python: Add a Ring Sector or a Wedge to a Polar Plot

南笙酒味 提交于 2019-12-07 04:59:06

问题


I have a polar plot with a specific section that I would like to colour completely in red (it is the section marked between the two red lines. Is there a function that will color that section? Or is it possible to get a solid ring sector using the Patch Collection?

Here is my script:

from pylab import *
import matplotlib.pyplot as plt
import numpy as np
import pylab
from matplotlib.projections import PolarAxes



###############################################################################
###############################################################################


fig = figure()
ax = fig.add_subplot(111, projection = 'polar')


subplot(111,projection='polar')
theta = arange(1000)*2*pi/1000.

plot(theta,0.25*ones(1000),'m') #A to B Circle
plot(theta, 0.65*ones(1000), 'm') # B to C Circle
plot([0, 0],[0.25,0.65],'m') # A to B 0 degrees line  
plot([pi/4.,pi/4.],[0.25, 0.65], 'm') # A to B 45 degrees line
plot([pi/2, pi/2.],[0.25, 0.65], 'm') # A to B 90 degrees line
plot([3*pi/4.,3*pi/4],[0.25, 0.65], 'm') # A to B 135 degrees line

plot([pi,pi],[0.25,0.65],'m') # A to B 180 degrees line
plot([5*pi/4,5*pi/4],[0.25, 0.65], 'm') # A to B 225 degrees line
plot([3*pi/2,3*pi/2],[0.25, 0.65], 'm') # A to B 270 degrees line
plot([7*pi/4,7*pi/4],[0.25, 0.65], 'm') # A to B 315 degrees line

plot([2*pi,2*pi],[0.25,0.65],'m') # A to B 360 degrees line

plot([0, 0],[0.65,1],'m') # B to C 0 degrees line
plot([pi/6,pi/6],[0.65, 1], 'm') # B to C 30 degrees line
plot([pi/3,pi/3.],[0.65,1], 'm') # B to C 60 degrees line
plot([pi/2,pi/2],[0.65,1], 'm') # B to C 90 degrees line

plot([2*pi/3,2*pi/3],[0.65,1],'m') # B to C 120 degrees line
plot([5*pi/6,5*pi/6],[0.65,1], 'm') # B to C 150 degrees line
plot([pi,pi],[0.65,1], 'm') # B to C 180 degrees line
plot([7*pi/6,7*pi/6],[0.65,1], 'm') # B to C 210 degrees line

plot([4*pi/3,4*pi/3],[0.65,1],'r', linewidth = 5) # B to C 240 degrees line
plot([3*pi/2,3*pi/2],[0.65,1], 'r', linewidth = 5) # B to C 270 degrees line
plot([5*pi/3,5*pi/3],[0.65, 1], 'm') # B to C 300 degrees line
plot([11*pi/6,11*pi/6],[0.65,1], 'm') # B to C 330 degrees line

plot([2*pi,2*pi],[0.65,1],'m') # B to C 360 degrees line




#patches = [Wedge((0,0), 1, 4*pi/3, 3*pi/2)]
#p = PatchCollection(patches)
#ax.add_collection(p)

rgrids((1,1),('',''))


ax.set_theta_zero_location("N")
ax.set_theta_direction('clockwise')         

show()

回答1:


A wedge seems to be the way to go, but by default it will also be transformed to polar coordinates. You could give the wedge the axes transformation, that would visually work, but make it hard if you want wedges plotted based on data.

It could done like:

ax.add_artist(Wedge((.5,.5), 0.53, 180, 215, width=0.2, transform=ax.transAxes, color='red'))



来源:https://stackoverflow.com/questions/13611853/python-add-a-ring-sector-or-a-wedge-to-a-polar-plot

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!