#-*- coding: utf-8 -*-
import pandas as pd
catering_sale = '../data/catering_sale.xls' #餐飲資料
data = pd.read_excel(catering_sale, index_col = u'日期') #讀取資料,指定“日期”列為索引列
import matplotlib.pyplot as plt #匯入影像庫
plt.rcParams['font.sans-serif'] = ['SimHei'] #用來正常顯示中文標簽
plt.rcParams['axes.unicode_minus'] = False #用來正常顯示負號
plt.figure() #建立影像
p = data.boxplot() #畫箱線圖,直接使用DataFrame的方法
x = p['fliers'][0].get_xdata() # 'flies'即為例外值的標簽
y = p['fliers'][0].get_ydata()
y.sort() #從小到大排序,該方法直接改變原物件
#用annotate添加注釋
#其中有些相近的點,注解會出現重疊,難以看清,需要一些技巧來控制。
#以下引數都是經過除錯的,需要具體問題具體除錯。
for i in range(len(x)):
if i>0:
plt.annotate(y[i], xy = (x[i],y[i]), xytext=(x[i]+0.05 -0.8/(y[i]-y[i-1]),y[i]))
else:
plt.annotate(y[i], xy = (x[i],y[i]), xytext=(x[i]+0.08,y[i]))
plt.show() #展示箱線圖
很多地方都有這個示例,可是下面兩句會報錯,為什么呢?
x = p['fliers'][0].get_xdata() # 'flies'即為例外值的標簽
y = p['fliers'][0].get_ydata()
uj5u.com熱心網友回復:
樓主先看看p的資訊
uj5u.com熱心網友回復:
能否詳細點?請問為什么我的環境下p的詳細資訊列印的沒那么多呢?只會列印出:
uj5u.com熱心網友回復:
不知道樓主的資料是怎么來的,試試這個吧
data = pd.DataFrame({'A':1.,
'B' : pd.Series(1, index=list(range(4)), dtype='float32'),
'C' : pd.Series([1, 2, 1, 2], dtype='int32'),})
p = data.boxplot()
uj5u.com熱心網友回復:
樓主這個問題解決了嗎,同問!!!uj5u.com熱心網友回復:
p = data.boxplot(return_type = 'dict') 就可以了uj5u.com熱心網友回復:
為啥呀?能解釋下嗎?uj5u.com熱心網友回復:
p = data.boxplot(return_type='dict'),在括號里加上這句代碼uj5u.com熱心網友回復:
當return=‘dict’時,回傳結果為一個字典,有幾個鍵值,分別為:boxes:顯示四分位數和中位數的置信區間(如果啟用的話)(其實就是繞著主體矩形四個頂點環繞一周)
median:每一個box的橫隔線
whiskers: 延伸到不大于例外值的點的垂線
caps: 邊界線
fliers: 所有的例外值點
means: 代表均值的點或者線
不加回傳值時無法獲取鍵值fliers,所以后面陳述句會報錯
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/34974.html
