Wal*_*nes 2 python matplotlib pandas
Python中的普通matplotlib boxplot命令返回一个字典,其中包含方框,中位数,胡须,传单和大写字母的键.这使得造型非常简单.
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
# Create a dataframe and subset it for a boxplot
df1 = pd.DataFrame(rand(10), columns=['Col1'] )
df1['X'] = pd.Series(['A','B','A','B','A','B','A','B','A','B'])
boxes= [df1[df1['X'] == 'A'].Col1, df1[df1['X'] == 'B'].Col1]
# Call the standard matplotlib boxplot function,
# which returns a dictionary including the parts of the graph
mbp = plt.boxplot(boxes)
print(type(mbp))
# This dictionary output makes styling the boxplot easy
plt.setp(mbp['boxes'], color='blue')
plt.setp(mbp['medians'], color='red')
plt.setp(mbp['whiskers'], color='blue')
plt.setp(mbp['fliers'], color='blue')
Run Code Online (Sandbox Code Playgroud)
Pandas库为其分组(分层索引)数据帧提供了"优化"boxplot函数.但是,它不返回每个组的几个字典,而是返回一个matplotlib.axes.AxesSubplot对象.这使得造型非常困难.
# Pandas has a built-in boxplot function that returns
# a matplotlib.axes.AxesSubplot object
pbp = df1.boxplot(by='X')
print(type(pbp))
# Similar attempts at styling obviously return TypeErrors
plt.setp(pbp['boxes'], color='blue')
plt.setp(pbp['medians'], color='red')
plt.setp(pbp['whiskers'], color='blue')
plt.setp(pbp['fliers'], color='blue')
Run Code Online (Sandbox Code Playgroud)
这个由pandas df.boxplot(by ='X')生成的AxisSubplot对象是否可以访问?
小智 7
您也可以指定return_typeas dict.这将直接在字典中返回boxplot属性,该字典由在boxplot中绘制的每列进行索引.
要使用上面的示例(在IPython中):
from pandas import *
import matplotlib
from numpy.random import rand
import matplotlib.pyplot as plt
df = DataFrame(rand(10,2), columns=['Col1', 'Col2'] )
df['X'] = Series(['A','A','A','A','A','B','B','B','B','B'])
bp = df.boxplot( by='X', return_type='dict' )
>>> bp.keys()
['Col1', 'Col2']
>>> bp['Col1'].keys()
['boxes', 'fliers', 'medians', 'means', 'whiskers', 'caps']
Run Code Online (Sandbox Code Playgroud)
现在,改变线宽是列表理解的问题:
>>> [ [item.set_linewidth( 2 ) for item in bp[key]['medians']] for key in bp.keys() ]
[[None, None], [None, None]]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6843 次 |
| 最近记录: |