如何使用 zorder 更改这些图的顺序?
How to change the order of these plots using zorder?
我正在尝试让线图位于条形图之上。但无论我做什么来改变 zorder,它似乎都保持在行的顶部。我尝试更改 zorder 所做的任何事情似乎都没有用。有时,如果 zorder <= 0,则条形图不会显示。
import pandas as pd
import matplotlib.pyplot as plt
def tail_plot(tail):
plt.figure()
#line plot
ax1 = incidence[incidence['actual_inc'] != 0].tail(tail).plot(x='date', y=['R_t', 'upper 95% CI', 'lower 95% CI'], color = ['b', '#808080', '#808080'])
ax1.set_zorder(2)
ax2 = ax1.twinx()
inc = incidence[incidence['actual_inc'] != 0]['actual_inc'].tail(tail).values
dates = incidence[incidence['actual_inc'] != 0]['date'].tail(tail).values
#bar plot
ax2.bar(dates, inc, color ='red', zorder=1)
ax2.set_zorder(1)
一直给我这个:
post 中方法的问题是 ax1
有一个白色背景,完全遮挡了 ax2
的情节。为了解决这个问题,背景色可以设置为'none'.
请注意,post 示例代码中的 plt.figure()
创建了一个空图,因为 pandas 图创建了自己的新图形(因为没有 ax
明确给出)。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame({f'curve {i}': 20 + np.random.normal(.1, .5, 30).cumsum() for i in range(1, 6)})
# line plot
ax1 = df.plot()
ax1.set_zorder(2)
ax1.set_facecolor('none')
ax2 = ax1.twinx()
# bar plot
x = np.arange(30)
ax2.bar(x, np.random.randint(7 + x, 2 * x + 10), color='red', zorder=1)
ax2.set_zorder(1)
plt.show()
我正在尝试让线图位于条形图之上。但无论我做什么来改变 zorder,它似乎都保持在行的顶部。我尝试更改 zorder 所做的任何事情似乎都没有用。有时,如果 zorder <= 0,则条形图不会显示。
import pandas as pd
import matplotlib.pyplot as plt
def tail_plot(tail):
plt.figure()
#line plot
ax1 = incidence[incidence['actual_inc'] != 0].tail(tail).plot(x='date', y=['R_t', 'upper 95% CI', 'lower 95% CI'], color = ['b', '#808080', '#808080'])
ax1.set_zorder(2)
ax2 = ax1.twinx()
inc = incidence[incidence['actual_inc'] != 0]['actual_inc'].tail(tail).values
dates = incidence[incidence['actual_inc'] != 0]['date'].tail(tail).values
#bar plot
ax2.bar(dates, inc, color ='red', zorder=1)
ax2.set_zorder(1)
一直给我这个:
post 中方法的问题是 ax1
有一个白色背景,完全遮挡了 ax2
的情节。为了解决这个问题,背景色可以设置为'none'.
请注意,post 示例代码中的 plt.figure()
创建了一个空图,因为 pandas 图创建了自己的新图形(因为没有 ax
明确给出)。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame({f'curve {i}': 20 + np.random.normal(.1, .5, 30).cumsum() for i in range(1, 6)})
# line plot
ax1 = df.plot()
ax1.set_zorder(2)
ax1.set_facecolor('none')
ax2 = ax1.twinx()
# bar plot
x = np.arange(30)
ax2.bar(x, np.random.randint(7 + x, 2 * x + 10), color='red', zorder=1)
ax2.set_zorder(1)
plt.show()