spyder中绘图无法显示负号_matlibplot+seaborn绘图风格交叉使用
生活随笔
收集整理的這篇文章主要介紹了
spyder中绘图无法显示负号_matlibplot+seaborn绘图风格交叉使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
matlibplot+seaborn繪圖風格交叉使用
遇到問題:想要圖一的圖案,但是想要seaborn中默認的風格繪制
圖一一開始的想法是seaborn既然升級版matlibplot,應該支持直接修改plt.plot==>sns.barplot ,但實際上是不支持的。
# coding:utf-8 from pandas import Series,DataFrame from numpy.random import randn import numpy as np import matplotlib.pyplot as plt from pylab import mpl import seaborn as sns sns.set_style("whitegrid") plt.rc("font",family="SimHei",size="16") #用于解決中文顯示不了的問題 sns.set_style("whitegrid") plt.rcParams['font.sans-serif'] = ['SimHei'] # 中文字體設置-黑體 plt.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負號'-'顯示為方塊的問題 sns.set(font='SimHei') # 解決Seaborn中文顯示問題#創建一個畫板 fig=plt.figure(figsize=(8,6))#為畫板劃分多個Axes ax = plt.subplot(111) #假如設置為221,則表示創建兩行兩列也就是4個子畫板,ax為第一個子畫板#數據準備 stock_type_list=[[396, 384], [351, 429], [0, 780], [368, 412], [0, 780], [167, 613], [390, 390], [4, 776], [332, 448], [399, 381], [25, 755], [265, 515]]#y軸數據 ya = np.array([i[0] for i in stock_type_list[::3]]) # 股價差跌 yb = np.array([i[1] for i in stock_type_list[::3]])#柱狀圖的寬度 width = 0.3 #x軸數據 x_bar = np.arange(4)#繪制柱狀圖 rects1 = sns.barplot(x_bar-width/2,ya,label='跌') rects2 = sns.barplot(x_bar+width/2,yb,label='漲',)#為柱狀圖添加高度值(不能使用因為sns.plot中不是iteration) # for rect in rects1: # x1 = rect.get_x() # height1 = rect.get_height() # ax.text(x1+0.2,1.01*height1,str(height1)) # # print(x,height) # for rect in rects2: # x2 = rect.get_x() # height2 = rect.get_height() # ax.text(x2+0.2,1.01*height2,str(height2))#設置x軸的刻度 ax.set_xticks(x_bar) ax.set_xticklabels(['后1天股價差','后5天股價差','后20天股價差','后60天股價差'])#設置y軸的刻標注 ax.set_ylabel("回購數量(單位:次數)") ax.set_xlabel("回購后影響天數")#是否顯示網格 # ax.grid(True)#拉伸y軸 # ax.set_ylim(0,28)#設置標題 ax.set_title("回購后的股價差漲跌幅統計")plt.legend(loc='lower right')#顯示圖表 plt.show()fig.savefig('回購后股價差.png')圖二出來結果圖二是柱狀圖混亂,沒有顯示兩個柱狀圖。
第二次:是創建一個dataframe,和使用seaborn繪制折線想法一樣,直接扔一堆data到sns.lineplot(data=DataFrame)即可
# 使用seaborn繪制多柱狀圖 ''' 使用seaborn繪制雙柱狀圖不可行的原因:sns.barplot的api接口太高級,sns的思想是,你給我數據,我來幫你區分怎么樣切割數據 例如:seaborn.barplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, estimator=<function mean at 0x10a2a03b0>, ci=95, n_boot=1000, units=None, seed=None, orient=None, color=None, palette=None, saturation=0.75, errcolor='.26', errwidth=None, capsize=None, dodge=True, ax=None, **kwargs) 直接給定dataframe中的x,y,hue來切割,data=DataFrame,直接繪制會無法識別,而發生重疊但是繪制折線圖是可以:sns.lineplot折線可以的原因是折線本身可以發生重疊。 '''price_dict={ # 'index':['后1天股價差','后5天股價差','后20天股價差','后60天股價差'],'股價跌':[396,368,390,399],'股價漲':[384,412,390,381],}price_diff_df=pd.DataFrame(data=price_dict ,index=['后1天股價差','后5天股價差','后20天股價差','后60天股價差'],)price_diff_dfprice_sea_da=[price_diff_df["股價跌"],price_diff_df["股價漲"]]fig=plt.figure(figsize=(8,4)) ax = plt.subplot(111)ax=sns.barplot(data=price_sea_da)ax.set_ylabel("回購后n天平均股價變化") # 比如回購發生后幾天內的平均股價 ax.set_xlabel("占總股本比例(單位:%)增長排序")#設置x軸的刻度 ax.set_title("回購后n天平均股價變化") # ax.set_xticklabels(price_sort_df['占總股本比例'].tolist())plt.show() # fig.savefig('回購后n天占總股本比例--平均股價變化.png')第三次:可以在繪制matlibplot的基礎上,修改到seaborn的風格
# coding:utf-8 from pandas import Series,DataFrame from numpy.random import randn import numpy as np import matplotlib.pyplot as plt from pylab import mpl import seaborn as sns # sns.set_style("whitegrid") plt.rc("font",family="SimHei",size="16") #用于解決中文顯示不了的問題 # sns.set_style("whitegrid") plt.rcParams['font.sans-serif'] = ['SimHei'] # 中文字體設置-黑體 plt.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負號'-'顯示為方塊的問題 sns.set(font='SimHei') # 解決Seaborn中文顯示問題 % matplotlib inline#再論柱狀圖 #創建一個畫板 print("可使用的風格",plt.style.available) fig=plt.figure(figsize=(8,6)) plt.style.use('tableau-colorblind10') # 這種風格可以使用中文字體,使用seaborn默認交叉使用matlibplot會不支持中文,算一個bug?#為畫板劃分多個Axes ax = plt.subplot(111) #假如設置為221,則表示創建兩行兩列也就是4個子畫板,ax為第一個子畫板#數據準備 stock_type_list=[[396, 384], [351, 429], [0, 780], [368, 412], [0, 780], [167, 613], [390, 390], [4, 776], [332, 448], [399, 381], [25, 755], [265, 515]]#y軸數據 ya = np.array([i[0] for i in stock_type_list[1::3]]) # 股價差跌 yb = np.array([i[1] for i in stock_type_list[1::3]])#柱狀圖的寬度 width = 0.3 #x軸數據 x_bar = np.arange(4)#繪制柱狀圖 rects1 = ax.bar(x_bar-width/2,ya,width=width,label='跌',color='darkseagreen') rects2 = ax.bar(x_bar+width/2,yb,width=width,label='漲',color='olive')#為柱狀圖添加高度值 for rect in rects1:x1 = rect.get_x()height1 = rect.get_height()ax.text(x1+0.1,1.01*height1,str(height1)) # print(x,height) for rect in rects2:x2 = rect.get_x()height2 = rect.get_height()ax.text(x2+0.1,1.01*height2,str(height2))#設置x軸的刻度 ax.set_xticks(x_bar) ax.set_xticklabels([u'后1天平均股價','后5天平均股價','后20天平均股價','后60天平均股價'])#設置y軸的刻標注 ax.set_ylabel("回購數量(單位:次數)") ax.set_xlabel("回購后影響天數") #是否顯示網格 # ax.grid(True) #拉伸y軸 # ax.set_ylim(0,28) #設置標題 ax.set_title("回購后的平均股價漲跌幅統計") plt.legend(loc='lower right') #顯示圖表 plt.show() # fig.savefig('回購后平均股價.png')圖三總結
以上是生活随笔為你收集整理的spyder中绘图无法显示负号_matlibplot+seaborn绘图风格交叉使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python取中间值的函数_tensor
- 下一篇: 运维分级发布_华为杨超斌发布面向“1+N