【发布时间】:2021-08-02 06:52:28
【问题描述】:
第一次发帖,如有错误请提前道歉。
我正在尝试为嵌套的 for 循环创建 matplotlib 子图。
我的数据是广告数据关键字、点击次数、出价、day_of_week 列
我想为每个关键字创建 8 个图,x = 出价,y = 点击。 我希望第一个情节有该关键字的出价和点击次数,其他 7 个情节有一周中每一天的出价和点击次数(一周中的每一天一个情节)
现在,我可以将第一个图放到子图网格上(格式看起来很奇怪),而其他 7 个图单独出现,而不是显示在子图中。我创建了一个假 df 并包含了我在下面使用的代码。
我想做的事:
- 要修复的第一个绘图的格式
- 我希望星期一的情节位于第二个子情节位置
我将不胜感激任何和所有提示。谢谢!
我的代码:
#creating a unique list of days for the
day_list = df['day_of_week'].unique()
#create a plot for each keyword by day of week
def keyword_plots(x, y):
#create dict so that each day has a spot on the figure subplot
ndict = {'Monday': 2,
'Tuesday': 3,
'Wednesday': 4,
'Thursday': 5,
'Friday': 6,
'Saturday' : 7,
'Sunday' :8}
#dealing with colors
color_labels = y['day_of_week'].unique()
rgb_values = sns.color_palette("husl", 7)
color_map = dict(zip(color_labels, rgb_values))
#loop through each keyword and add it to the plot (first spot)
for each in x:
#create subset for each keyword
subset = y[y["keyword"]==each][["clicks","bid", "day_of_week"]]
#create one figure per keyword with 8 spaces
fig, axes = plt.subplots(2, 4, figsize=(20, 8))
fig.tight_layout()
#add this keyword plot to the first subplot space
ax=fig.add_subplot(4,4,1)
plt.scatter(subset['bid'], subset['clicks'], c = subset['day_of_week'].map(color_map), alpha=0.5)
#labels
plt.title(each)
plt.xlabel("bid")
plt.ylabel("clicks")
#trendlines
z = np.polyfit(subset["bid"], subset['clicks'], 1)
p = np.poly1d(z)
pylab.plot(subset['bid'],p(subset['bid']),"r--")
plt.show()
#loop through each day of the week and create one plot per week per keyword (7 total for Mon-Sun)
for i in day_list:
#subset the data
day_sub = subset[subset["day_of_week"]==i][["clicks","bid", "day_of_week"]]
#add the plot to the space corresponding to day of week (in ndict)
ax=fig.add_subplot(4, 4, ndict[i])
#create plot
plt.scatter(day_sub['bid'], day_sub['clicks'], c = day_sub['day_of_week'].map(color_map), alpha=0.5)
#plot lables
plt.title(each + " " + i)
plt.xlabel("bid")
plt.ylabel("clicks")
#trendline
z = np.polyfit(day_sub["bid"], day_sub['clicks'], 1)
p = np.poly1d(z)
pylab.plot(day_sub['bid'],p(day_sub['bid']),"r--")
plt.show()
keyword_plots(list_of_keywords_I_want, keywords_df)
【问题讨论】:
标签: python matplotlib visualization nested-loops subplot