Matplotlib覆盖imshow和饼图

时间:2018-03-08 17:36:04

标签: python matplotlib

我正在尝试将饼图覆盖在径向渐变上作为背景。它确实有效,但我希望图形显示整个径向渐变(没有将图形边界切割成方形)。

我如何实现这一目标?

我想要thisthis

之类的内容

谢谢。

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt


delta = 0.02
x = y = np.arange(-1.0, 1.0, delta)
X, Y = np.meshgrid(x, y)

plt.imshow(-X**2+-Y**2, interpolation='bicubic', cmap=plt.cm.Blues,
                origin='lower',extent=[-1.2, 1.2, -1.2, 1.2])

plt.pie([1]       , explode=None, radius=1.2          \
                                , labels=['H']        \
                                , labeldistance=0.9   \
                                , startangle=270      \
                                , colors=[g(0.70)])
plt.show()

1 个答案:

答案 0 :(得分:0)

很难让它在同一轴上工作。最好创建两个轴,一个用于背景图像,另一个用于饼图。这允许单独调整它们,即背景轴应该在整个图形范围内并且具有可调节的纵横比,而饼形轴应该具有一些边缘和相同的宽高比。

以下是将饼图(ax)置于imshow图(ax2)之上的示例。

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
fig.subplots_adjust(.1,.1,.9,.9)
ax.set_aspect("equal")
ax.pie([1,2], radius=1.2 , labels=['H',"A"] , labeldistance=0.9, 
            startangle=270 , colors=[plt.cm.Blues(1.), plt.cm.Blues(0.5)])

ax2 = fig.add_axes([0,0,1,1], zorder=-1)
ax2.axis("off")

w,h = fig.get_size_inches()
x = np.linspace(-1, 1)*w/h
y = np.linspace(-1, 1)
X, Y = np.meshgrid(x, y)
ax2.imshow(-X**2-Y**2, interpolation='bicubic', cmap=plt.cm.Blues,
                origin='lower', aspect="auto", vmin=-0.99)

plt.show()

enter image description here