我想在同一图中绘制一个条形图并计数图。但是,当我用两个不同的y轴绘制它们时,两个图相互重叠(参见图片)。是否可以选择将其中一个地块“移”到一边?
fig, ax1 = plt.subplots(figsize=(15, 10))
ax2 = ax1.twinx()
ax1.bar(x=damage_sum[Kanton], height=damage_sum[sTot], color=colors)
ax2 = sns.countplot(x=dff[Kanton], data=dff, palette=colors, order=cantons)
数据描述
damage_sum[Kanton] = ['ZG', 'VD', 'SO', 'SG', 'NW', 'NE', 'LU',
'JU', 'GR', 'GL', 'FR', 'BL', 'AG']
答案 0 :(得分:0)
虽然有些混乱,但是手动更改条的宽度和位置可以完成工作。
我使用了seaborn的条形图,绘制数据框更容易
$ unzip -l Word.docx
Archive: Word.docx
Length Date Time Name
--------- ---------- ----- ----
1364 1980-01-01 00:00 [Content_Types].xml
734 1980-01-01 00:00 _rels/.rels
817 1980-01-01 00:00 word/_rels/document.xml.rels
1823 1980-01-01 00:00 word/document.xml
6799 1980-01-01 00:00 word/theme/theme1.xml
2068 1980-01-01 00:00 docProps/thumbnail.emf
2652 1980-01-01 00:00 word/settings.xml
1954 1980-01-01 00:00 word/fontTable.xml
576 1980-01-01 00:00 word/webSettings.xml
735 1980-01-01 00:00 docProps/core.xml
28979 1980-01-01 00:00 word/styles.xml
709 1980-01-01 00:00 docProps/app.xml
--------- -------
49210 12 files
barplot的条形图和countplot的条形图在高度上的变化很大,因此我想说归一化值,countplot不支持Estimator,因此请使用barplot的estimator来找到相对值
import seaborn as sns;sns.set()
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
def change_width(ax, new_value,recenter=False) :
for patch in ax.patches :
current_width = patch.get_width()
diff = current_width - new_value
patch.set_width(new_value)
if recenter==True:
patch.set_x(patch.get_x() + diff * .5) #To recenter the bars
df = sns.load_dataset('tips')
fig, ax1 = plt.subplots(figsize=(8, 8))
ax2 = ax1.twinx()
ax1 = sns.countplot(x='day', data=df)
change_width(ax1, 0.35)
ax2 = sns.barplot(x="day", y="total_bill", data=df,palette='viridis')
change_width(ax1, 0.35,True)