<h2>设置数据帧</h2>
<ol>
<li>验证要绘制的数据帧的索引已重置,因此它是从0开始的整数,并将该索引用作x轴</li>
<li>在y轴上绘制值</li>
</ol>
<h2>备选方案1A:Seaborn <code>hue</code></h2>
<ul>
<li>最简单的方法可能是使用<code>seaborn.barplot</code>并将<code>hue</code>参数与<code>'names'</code>一起使用</li>
<li><a href="https://seaborn.pydata.org/tutorial/color_palettes.html" rel="nofollow noreferrer">Seaborn: Choosing color palettes</a>
<ul>
<li>此绘图正在使用<code>husl</code></li>
<li>有关<code>husl</code>调色板的其他选项,请访问<a href="https://seaborn.pydata.org/generated/seaborn.husl_palette.html#seaborn.husl_palette" rel="nofollow noreferrer">^{<cd7>}</a></li>
</ul>
</li>
<li>对于此选项,条形图不会居中,因为它们是根据色调级别的数量放置的,在这种情况下有15个级别</李>
</ul>
<pre class="lang-py prettyprint-override"><code>import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# plt styling parameters
plt.style.use('seaborn')
plt.rcParams['figure.figsize'] = (16.0, 10.0)
plt.rcParams["patch.force_edgecolor"] = True
# create a color palette the length of the dataframe
colors = sns.color_palette('husl', n_colors=len(df))
# plot
p = sns.barplot(x=df.index, y='values', data=df, hue='names')
# place the legend to the right of the plot
plt.legend(bbox_to_anchor=(1.04, 0.5), loc='center left', borderaxespad=0)
</code></pre>
<p><a href="https://i.stack.imgur.com/naLAb.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/naLAb.png" alt="enter image description here"/></a></p>
<h2>备选方案1B:Seaborn <code>palette</code></h2>
<ul>
<li>使用<code>palette</code>参数而不是<code>hue</code>,将条直接放置在刻度上</李>
<li>此选项需要“手动”将<code>'names'</code>与颜色关联并创建图例。
<ul>
<li><a href="https://matplotlib.org/3.2.2/api/_as_gen/matplotlib.patches.Patch.html#matplotlib.patches.Patch" rel="nofollow noreferrer">^{<cd12>}</a>使用<code>Patch</code>创建图例中的每个项目。(例如,与颜色和名称关联的矩形)</李>
</ul>
</li>
</ul>
<pre class="lang-py prettyprint-override"><code>import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib.patches import Patch
# create a color palette the length of the dataframe
colors = sns.color_palette('husl', n_colors=len(df))
# plot
p = sns.barplot(x=df.index, y='values', data=df, palette=colors)
# create color map with colors and df.names
cmap = dict(zip(df.names, colors))
# create the rectangles for the legend
patches = [Patch(color=v, label=k) for k, v in cmap.items()]
# add the legend
plt.legend(handles=patches, bbox_to_anchor=(1.04, 0.5), loc='center left', borderaxespad=0)
</code></pre>
<p><a href="https://i.stack.imgur.com/ds71S.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/ds71S.png" alt="enter image description here"/></a></p>
<h2>备选案文2:<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.plot.html" rel="nofollow noreferrer">^{<cd14>}</a></h2>
<ul>
<li>此选项还需要“手动”将<code>'names'</code>与调色板关联,并使用<code>Patch</code>创建图例</李>
<li><a href="https://matplotlib.org/tutorials/colors/colormaps.html#choosing-colormaps-in-matplotlib" rel="nofollow noreferrer">Choosing Colormaps in Matplotlib</a>
<ul>
<li>此绘图正在使用<code>tab20c</code></li>
</ul>
</li>
</ul>
<pre class="lang-py prettyprint-override"><code>import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.patches import Patch
# plt styling parameters
plt.style.use('seaborn')
plt.rcParams['figure.figsize'] = (16.0, 10.0)
plt.rcParams["patch.force_edgecolor"] = True
# chose a color map with enough colors for the number of bars
colors = [plt.cm.tab20c(np.arange(len(df)))]
# plot the dataframe
df.plot.bar(color=colors)
# create color map with colors and df.names
cmap = dict(zip(df.names, colors[0]))
# create the rectangles for the legend
patches = [Patch(color=v, label=k) for k, v in cmap.items()]
# add the legend
plt.legend(handles=patches, bbox_to_anchor=(1.04, 0.5), loc='center left', borderaxespad=0)
</code></pre>
<p><a href="https://i.stack.imgur.com/aOa7T.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/aOa7T.png" alt="enter image description here"/></a></p>
<h2>可复制数据帧</h2>
<pre class="lang-py prettyprint-override"><code>data = {'names': ['CD14_monocytes_treated_with_Group_A_streptococci_donor2.CNhs13532', 'Neutrophils_donor3.CNhs11905', 'CD14_monocytes_treated_with_Trehalose_dimycolate_TDM_donor2.CNhs13483', 'CD14_monocytes_treated_with_Candida_donor1.CNhs13473', 'CD14_Monocytes_donor2.CNhs11954', 'CD14_monocytes_treated_with_Candida_donor2.CNhs13488', 'CD14_Monocytes_donor3.CNhs11997', 'CD14_monocytes_treated_with_Group_A_streptococci_donor1.CNhs13469', 'Eosinophils_donor3.CNhs12549', 'CD14_monocytes_treated_with_lipopolysaccharide_donor1.CNhs13470', 'CD14_monocytes_treated_with_Salmonella_donor1.CNhs13471', 'CD14_monocytes_treated_with_Candida_donor3.CNhs13494', 'CD14_monocytes_-_treated_with_Group_A_streptococci_donor3.CNhs13492', 'Neutrophils_donor1.CNhs10862', 'Neutrophils_donor2.CNhs11959'],
'values': [1.583428, 1.832527, 1.858384, 1.873013, 2.041607, 2.1121112, 2.195365, 2.974203, 3.566822, 3.685389, 4.409062, 5.546789, 5.673991, 8.352045, 11.595509]}
df = pd.DataFrame(data)
</code></pre>