用于自动打印的功能。各种子图和各种图形
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用于自动打印的功能。各种子图和各种图形相关的知识,希望对你有一定的参考价值。
我想创建一个函数来返回各种图形,每个图形中最多包含9个子图。也就是说,如果我想要18个子图,我想有两个人物,每个图有9个子图。如果我想拥有16个子图,则我希望在3x3网格中有一个包含9个子图的图形,而另一个只有7个子图的图形。首先一些玩具数据:
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
rs = np.random.RandomState(444)
dates = pd.date_range(start="2009-01-01", end='2019-12-31', freq='1D')
values = rs.randn(4017,6).cumsum(axis=0)
data = pd.DataFrame(abs(values), dates, columns =['a','b','c','d','e','f'])
现在是我正在使用的代码:
fig, axes = plt.subplots(3,3, figsize=(15,6))
for (year, mini_df), ax in zip(data.groupby(data.index.year), axes.flatten()):
mini_df['b'].plot(linewidth=1.5, ax=ax, ylim=(0,100))
ax.set_title(year)
ax.xaxis.set_major_locator(mdates.MonthLocator(bymonth=[1,3,6,9,12]))
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b'))
让我得到这个:here
如您所见,仍然没有出现2018和2019。我可以添加另一行,但我真的很想看看大家如何解决这个问题。我不太想办法解决。预先感谢。
答案
非常直接的方法,但是有效。
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
rs = np.random.RandomState(444)
dates = pd.date_range(start="2009-01-01", end='2019-12-31', freq='1D')
values = rs.randn(4017,6).cumsum(axis=0)
data = pd.DataFrame(abs(values), dates, columns =['a','b','c','d','e','f'])
df_group = data.groupby(data.index.year)
count = 0
col = 0
row = 0
fig, axes = plt.subplots(3,3, figsize=(15,6))
for year, index in df_group.groups.items():
ax = axes[row, col]
ax.set_title(year)
ax.xaxis.set_major_locator(mdates.MonthLocator(bymonth=[1,3,6,9,12]))
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b'))
df_group.get_group(year).plot(linewidth=1.5, ax=ax, ylim=(0,100))
count += 1
col += 1
if count % 3 == 0:
row += 1
col = 0
if count % 9 == 0:
col = 0
row = 0
fig, axes = plt.subplots(3,3, figsize=(15,6))
以上是关于用于自动打印的功能。各种子图和各种图形的主要内容,如果未能解决你的问题,请参考以下文章