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绘图风格交叉使用相关推荐

  1. spyder中绘图无法显示负号_Python绘图--时序图

    众所周知,使用python绘图特别简单,容易上手.本篇通过一个简单的demo展示:如何使用matplotlib包 绘制时间序列图. 一.读取数据及处理 通过pandas读取CSV文件,keep_def ...

  2. spyder中绘图无法显示负号_[转载]Matlab常用函数

    计算样本的百份位数 Matlab的常用内部数学函数 指数函数 exp(x) 以e为底数 对数函数 log(x) 自然对数,即以e为底数的对数 log10(x) 常用对数,即以10为底数的对数 log2 ...

  3. seaborn绘图基础介绍

    目录   1.seaborn的优点   2.seaborn的官网   3.seaborn的作者介绍   4.seaborn的缩写为什么是sns,而不是sbn?   5.seaborn与matplotl ...

  4. Seaborn使用violinplot函数可视化多分组小提琴图(violin plot)、每个小提琴图内部包含两个分组、使用inner函数设置在小提琴图中使用虚线显示分位数位置

    Seaborn使用violinplot函数可视化多分组小提琴图(violin plot).每个小提琴图内部包含两个分组.使用inner函数设置在小提琴图中使用虚线显示分位数位置(inner = 'qu ...

  5. python画图为什么运行不出来_PyCharm中Matplotlib绘图不能显示UI效果的问题解决

    问题描述 我们利用了Matplotlib的类Cursor,向图形添加一组纵横交叉的直线,从而实现图形界面中任何位置的数值定位的可视化效果. 但使用PyCharm,绘图结果在右侧的部分: 这固然是需要绘 ...

  6. python中texttable库显示实时数据_用Python串口实时显示数据并绘图pyqtgraph

    用Python串口实时显示数据并绘图 使用pyserial进行串口传输 一.安装pyserial以及基本用法 在cmd下输入命令pip install pyserial 注:升级pip后会出现 &qu ...

  7. 让图形变得精致:seaborn绘图基础

    本文来自读者投稿,作者:黄同学 学习Python中用seaborn绘图的技巧 1.seaborn的优点 它简化了复杂数据集的表示: 可以轻松构建复杂的可视化,简洁的控制matplotlib图形样式与几 ...

  8. seaborn绘图入门1(lineplot+barplot+heatmap+scatterplot)

    文章目录 1. lineplot 线图 2. barplot .heatmap 条形图.热图 2.1 barplot,条形图 2.2 heatmap,热图 3. scatterplot.regplot ...

  9. 数据可视化——利用pandas和seaborn绘图基础

    文章目录 一.折线图 二.柱状图 三.直方图和密度图 四.散点图或点图 五.分面网格 其他绘图工具: 图像可视化--matplotlib绘图入门基础 一.折线图 1.Series和DataFrame都 ...

最新文章

  1. 开发ing经验关于游戏中寻路
  2. html5 居于页面中心,css笔记:如何让一个div居于页面正中间
  3. 第19讲:Pyppeteer 爬取实战
  4. Angular rxjs operators 笔记
  5. 动态创建标记+css_dom+js动态效果
  6. java小应用_java小应用
  7. qtreewidgetitem 文字内存太长换行_table文字溢出显示省略号问题
  8. python求解非线性多元方程_求解python中的colebrook(非线性)方程
  9. 用Openswan组建Linux IPSec ---第一部分
  10. IDF 实验室 初探乾坤
  11. 题解 P2163 SHOI2007 园丁的烦恼
  12. OneNote使用教程
  13. java voip 的sip服务器搭建_SIP协议开源SIP服务器搭建和客户端安装
  14. Rhino7安装教程
  15. 笔记本电脑插网线显示未识别的网络_笔记本插入网线,显示未识别网络
  16. Linux的命令回收站在哪,Trash-Cli:Linux 上的命令行回收站工具
  17. cannon的英文名_卡农的作者是谁啊 此曲的赏析 英文名cannon不是大炮吗
  18. 商用车市场「跌跌不休」,主动安全「让位」智能驾驶?
  19. Xinetd服务的安装与配置详解
  20. linux常用命令:iconv 命令(用于文件的编码转换),还可以用UE另存

热门文章

  1. POJ--3268--Silver Cow Party【SPFA+邻接表】
  2. sem_我知道的关键词1
  3. emacs 跳转到指定行
  4. 使用Installshield制作asp,asp.net应用的安装程序
  5. FFmpeg音频编码 ---- pcm转aac(使用新版ffmpeg API,亲测可用)
  6. MATLAB读取excel文件中的数据
  7. VC实现HTTP协议的GET和POST方法
  8. 张衡的地震仪不起作用的原因
  9. Android开源框架——内存泄漏检测工具 LeakCanary
  10. php post请求后端拿不到值_[精选] uniapp实现多端开发,与PHP是如何结合的