ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – 在散景中的两列上创建聚类条形图

2019-05-27 16:43:42  阅读:331  来源: 互联网

标签:python pandas data-visualization bokeh


我有一个如下所示的数据框:

       type    price1     price2
0        A     5450.0     31980.0
1        B     5450.0     20000.0
2        C     15998.0    18100.0

我想要的是一个聚类条形图,它将“类型”与“价格”进行对比.最终目标是一个图表,每种类型有两个条形,一个条形为“price1”,另一个条形条形为“price2”.两列都在同一个单元($)中.使用Bokeh我可以按类型分组,但我似乎无法通过一个通用的“价格”单元进行分组.到目前为止我有这个代码:

import pandas as pd
import numpy as np
from bokeh.charts import Bar, output_file, show
from bokeh.palettes import Category20 as palette
from bokeh.models import HoverTool, PanTool
p = Bar(
        df,
        plot_width=1300,
        plot_height=900,
        label='type',
        values='price2',
        bar_width=0.4,
        legend='top_right',
        agg='median',
        tools=[HoverTool(), PanTool()],
        palette=palette[20])

但是这只能为每个类型获得一列.enter image description here

如何修改我的代码以获得每种类型的两个条形图?

解决方法:

你的桌子是“宽”格式.您希望首先使用pd.melt()函数将其融合为长格式.对于可视化,我建议您使用“Seaborn”包,让您的生活更轻松.你可以在一行中想象每件事.

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

your_df = pd.DataFrame(data={'type': ['A','B','C'],
      'price1':[5450, 5450, 15998],
      'price2' : [3216, 20000, 15000]})

long_df = pd.melt(your_df,id_vars = ['type'],value_vars =['price1','price2'])
print long_df

my_plot = sns.barplot(x="type", y="value",hue = "variable", data=long_df)
sns.plt.show()

enter image description here
可以在这里找到关于长格式和宽格式的好帖子:
Reshape Long Format Multivalue Dataframes with Pandas

如果你坚持使用散景这就是你如何做到这一点,因为renzop指出:

p = Bar(long_df,
    plot_width=1000,
    plot_height=800,
    label='type',
    values='value',
    bar_width=0.4,
    group='variable',
    legend='top_right')

show(p)

标签:python,pandas,data-visualization,bokeh
来源: https://codeday.me/bug/20190527/1164832.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有