Open pengguanjun opened 5 years ago
1. import numpy as np
2. import seaborn as sns
3. import matplotlib.pyplot as plt
4. sns.set( palette="muted", color_codes=True)
5. rs = np.random.RandomState(10)
6. d = rs.normal(size=100)
7. f, axes = plt.subplots(2, 2, figsize=(7, 7), sharex=True)
8. sns.distplot(d, kde=False, color="b", ax=axes[0, 0])
9. sns.distplot(d, hist=False, rug=True, color="r", ax=axes[0, 1])
10. sns.distplot(d, hist=False, color="g", kde_kws={"shade": True}, ax=axes[1, 0])
11. sns.distplot(d, color="m", ax=axes[1, 1])
12. plt.show()
Graphic corresponding code
you can do it, see https://github.com/Image-Py/imagepy/blob/master/imagepy/menus/Table/Chart/plot_plgs.py you can use sns to plot in run method, and plt.show.
`class SnsHist(Table): title = 'SnsHist Chart' para = {'cn':[], 'dir':'False', 'stack':False, 'bins':10, 'alpha':1.0, 'overlay':False, 'grid':False, 'title':''} asyn = False view = [(str, 'title', 'title', ''), ('fields', 'cn', 'select fields'), (int, 'bins', (3,1000), 0, 'bins', ''), (float, 'alpha', (0,1), 1, 'alpha', '0~1'), (list, 'dir', ['False', 'True'], str, 'kde', ''),
(bool, 'stack', 'stacked'),
(bool, 'overlay', 'draw every columns in one'),
(bool, 'grid', 'grid')]
def run(self, tps, data, snap, para = None):
if para['overlay']:
data[para['cn']].sns.distplot(stacked=para['stack'], bins=para['bins'], alpha=para['alpha'],
orientation=para['dir'], grid=para['grid'], title=para['title'])
else:
data[para['cn']].sns.distplot(stacked=para['stack'], bins=para['bins'], alpha=para['alpha'],
orientation=para['dir'], grid=para['grid'])
plt.show()
class Cumulative(Table): title = 'Cumulative Chart' para = {'cn':[], 'dir':'False', 'stack':False, 'bins':10, 'alpha':1.0, 'overlay':False, 'grid':False, 'title':''} asyn = False view = [(str, 'title', 'title', ''), ('fields', 'cn', 'select fields'), (int, 'bins', (3,1000), 0, 'bins', ''), (float, 'alpha', (0,1), 1, 'alpha', '0~1'), (list, 'dir', ['False', 'True'], str, 'cumulative', ''), (bool, 'stack', 'stacked'), (bool, 'overlay', 'draw every columns in one'), (bool, 'grid', 'grid')]
def run(self, tps, data, snap, para = None):
if para['overlay']:
data[para['cn']].sns.kdeplot(stacked=para['stack'], bins=para['bins'], alpha=para['alpha'],
orientation=para['dir'], grid=para['grid'], title=para['title'])
else:
data[para['cn']].kdeplot(stacked=para['stack'], bins=para['bins'], alpha=para['alpha'],
orientation=para['dir'], grid=para['grid'])
plt.show()
plgs = [Plot, Area, Bar, Box, Hist, Pie, Scatter, SnsHist, Cumulative]`
Error message:
simple start [] set value [] bind close Traceback (most recent call last): File "C:\Users\MaiBenBen\Desktop\imagepy-master(2)\imagepy-master\imagepy\ui\pluginloader.py", line 17, in
parent.Bind(wx.EVT_MENU, lambda x, p=item:p().start(), mi) File "C:\Users\MaiBenBen\Desktop\imagepy-master(2)\imagepy-master\imagepy\core\engine\table.py", line 128, in start self.ok(self.tps, para, callback) File "C:\Users\MaiBenBen\Desktop\imagepy-master(2)\imagepy-master\imagepy\core\engine\table.py", line 62, in ok else: self.runasyn(tps, tps.data, tps.snap, para, callafter) File "C:\Users\MaiBenBen\Desktop\imagepy-master(2)\imagepy-master\imagepy\core\engine\table.py", line 69, in runasyn self.run(tps, data, snap, para) File "C:\Users\MaiBenBen\Desktop\imagepy-master(2)\imagepy-master\imagepy\menus\Table\Chart\plot_plgs.py", line 149, in run data[para['cn']].sns.distplot(stacked=para['stack'], bins=para['bins'], alpha=para['alpha'], File "C:\Users\MaiBenBen\Python36\lib\site-packages\pandas\core\generic.py", line 4376, in getattr return object.getattribute(self, name) AttributeError: 'DataFrame' object has no attribute 'sns' simple start [] set value [] bind close Traceback (most recent call last): File "C:\Users\MaiBenBen\Desktop\imagepy-master(2)\imagepy-master\imagepy\ui\pluginloader.py", line 17, in parent.Bind(wx.EVT_MENU, lambda x, p=item:p().start(), mi) File "C:\Users\MaiBenBen\Desktop\imagepy-master(2)\imagepy-master\imagepy\core\engine\table.py", line 128, in start self.ok(self.tps, para, callback) File "C:\Users\MaiBenBen\Desktop\imagepy-master(2)\imagepy-master\imagepy\core\engine\table.py", line 62, in ok else: self.runasyn(tps, tps.data, tps.snap, para, callafter) File "C:\Users\MaiBenBen\Desktop\imagepy-master(2)\imagepy-master\imagepy\core\engine\table.py", line 69, in runasyn self.run(tps, data, snap, para) File "C:\Users\MaiBenBen\Desktop\imagepy-master(2)\imagepy-master\imagepy\menus\Table\Chart\plot_plgs.py", line 175, in run data[para['cn']].kdeplot(stacked=para['stack'], bins=para['bins'], alpha=para['alpha'], File "C:\Users\MaiBenBen\Python36\lib\site-packages\pandas\core\generic.py", line 4376, in getattr return object.getattribute(self, name) AttributeError: 'DataFrame' object has no attribute 'kdeplot' simple start [] set value [] bind close
Source code that can run in vscode
`import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator, FormatStrFormatter
plt.rcParams['font.sans-serif'] = ['KaiTi']
plt.rcParams['font.serif'] = ['KaiTi']
import seaborn as sns
sns.set_style("darkgrid",{"font.sans-serif":['KaiTi', 'Arial']}) #这是方便seaborn绘图得时候得字体设置
sns.set( palette="muted", color_codes=True)
d = pd.read_csv('c:/Users/MaiBenBen/Desktop/kde/nicetable.csv',encoding='gbk')
f, ax = plt.subplots( figsize=(7,7))
plt.title('Cumulative Density Plot of Rock Fragmentation', fontsize=22)
sns.kdeplot(d.loc[:,'Diameter'],cumulative=True)
group_labels = ['0', '20%','40%','60%', '80%','100%']
ax.set_yticklabels(group_labels,#设置刻度对应的标签 rotation=0, fontsize='small')#rotation选项设定x刻度标签倾斜30度。
plt.xlabel('size (cm)') plt.ylabel('Passing(%)') #只有最后一个图有改变
fig = ax.get_figure() fig.savefig('a.png', dpi=100, bbox_inches='tight') plt.show() `
`import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator, FormatStrFormatter
plt.rcParams['font.sans-serif'] = ['KaiTi']
plt.rcParams['font.serif'] = ['KaiTi']
import seaborn as sns
sns.set_style("darkgrid",{"font.sans-serif":['KaiTi', 'Arial']}) #这是方便seaborn绘图得时候得字体设置
sns.set( palette="muted", color_codes=True)
d = pd.read_csv('c:/Users/MaiBenBen/Desktop/kde/nicetable.csv',encoding='gbk')
f, ax = plt.subplots( figsize=(7,7))
plt.title('Histgram of Rock Fragmentation', fontsize=22)
sns.distplot(d.loc[:,'Diameter'],kde=False,color="r")
group_labels = ['0', '10%', '20%','30%','40%','50%','60%', '70%','80%','90%','100%']
ax.set_yticklabels(group_labels,#设置刻度对应的标签 rotation=0, fontsize='small')#rotation选项设定x刻度标签倾斜30度。
plt.xlabel('size (cm)') plt.ylabel('Passing(%)') #只有最后一个图有改变
fig = ax.get_figure() fig.savefig('a.png', dpi=100, bbox_inches='tight') plt.show() `
`class SnsHist(Table): title = 'SnsHist Chart' para = {'cn':[], 'dir':'False', 'bins':10, 'overlay':False, 'title':''} asyn = False view = [(str, 'title', 'title', ''), ('fields', 'cn', 'select fields'), (int, 'bins', (3,1000), 0, 'bins', ''), (list, 'dir', ['False', 'True'], str, 'kde', ''), (bool, 'overlay', 'draw every columns in one')]
def run(self, tps, data, snap, para = None):
if para['overlay']:
sns.distplot(data[para['cn']], bins=para['bins'], kde=para['dir'], title=para['title'])
else:
sns.distplot(data[para['cn']], bins=para['bins'], kde=para['dir'])
plt.show()
print(para)`
This code can be used, but adding a title interactively will cause an error.
https://seaborn.pydata.org/