盒形图pandas绘制方法及数据不等长、坐标倾斜问题记录

10 篇文章 0 订阅
3 篇文章 0 订阅

boxplot的绘制方法,seaborn库pandas库matplotlib库均提供相关的方法。但所有方法都离不开pandas数据格式DataFrame的转换。在这里介绍一下pandas库的绘制,及遇到的相关问题和解决方案。

一、  pandas盒形图绘制

一个简单的代码例子如下:

import pandas as pd
from pandas import DataFrame,Series
df = DataFrame(np.random.randn(10, 2), columns=['Col1', 'Col2'])
boxplot=df.boxplot()

考虑到实际过程中,例如横轴可能是身高、体重等等,可能较为复杂,写一个相对复杂的代码演示如下:

# -*- coding:utf-8 -*-
 
"""
绘制箱体图
Created on 2020.01.03 by Luan
"""
 
 
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
 
"""
generate data from min to max
"""
def list_generator(number, min, max):
    dataList = list()
    for i in range(1, number):
        dataList.append(np.random.randint(min, max))
    return dataList
 
#generate 4 lists to draw
list1 = list_generator(100, 20, 80)
list2 = list_generator(100, 20, 50)
list3 = list_generator(100, 50, 100)
list4 = list_generator(100, 5, 60)
 
data = pd.DataFrame({
    "dataSet1":list1,
    "dataSet2":list2,
    "dataSet3":list3,
    "dataSet4":list4,
})
 
#draw
data.boxplot()
plt.ylabel("ylabel")
plt.xlabel("different datasets")
plt.show()

二、 数据不等长报错问题

在考虑一个更复杂的情况,即图像的每一列的样本个数是不一样,按照上述字典转df格式,会出现一个问题,举个例子:

d = {'A': [1, 2], 'C': [1, 2, 3, 4]}
data = pd.DataFrame(d)
print(data)

报错如下:

ValueError: arrays must all be same length

将上述代码进行更改

c = pd.DataFrame(dict([(k, pd.Series(v)) for k, v in d.items()]))

此时该错误得以解决。

三、 plotbox绘制时,横坐标的标签重合问题

官方pandas.DataFrame.boxplot解释如下:

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.boxplot.html

参数说明如下:

column,默认为None,输入为str 或由str构成的list,其作用是指定要进行箱型图分析的列

by,默认为None,str or array-like,其作用为pandas的group by,通过指定by=‘columns’,可进行多组合箱型图分析

ax,matplotlib.axes.Axes的对象,没有太大作用

fontsize,箱型图坐标轴字体大小

rot,箱型图坐标轴旋转角度

grid,箱型图网格线是否显示

figsize,箱型图窗口尺寸大小

layout,必须配合by 一起使用,类似于subplot 的画布分区域功能

return_type,指定返回对象的类型,默认为None,可输入的参数为‘axes’,‘dict’,‘both’,当与by一起使用是,返回的对象为Series或array(for return_type = None)
 

输入代码为:

data.boxplot(rot='45')

此时,标签会以一个45度的倾角,避免了重合。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值