Image-Py / imagepy

Image process framework based on plugin like imagej, it is esay to glue with scipy.ndimage, scikit-image, opencv, simpleitk, mayavi...and any libraries based on numpy
http://imagepy.org
BSD 4-Clause "Original" or "Old" License
1.29k stars 330 forks source link

Is it possible to add python's seaborn module to imagepy? I need seaborn's probability density map feature. #41

Open pengguanjun opened 5 years ago

pengguanjun commented 5 years ago

https://seaborn.pydata.org/

1. import matplotlib.pyplot as plt  
2. import seaborn as sns  
3. df_iris = pd.read_csv('../input/iris.csv')  
4. fig, axes = plt.subplots(1,2)  
5. sns.distplot(df_iris['petal length'], ax = axes[0], kde = True, rug = True)        # kde 密度曲线  rug 边际毛毯  
6. sns.kdeplot(df_iris['petal length'], ax = axes[1], shade=True)                     # shade  阴影                         
7. plt.show()  

default

pengguanjun commented 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

yxdragon commented 5 years ago

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.

pengguanjun commented 5 years ago

`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')]

sns.distplot(d.loc[:,'Diameter'],kde=False,color="r")

sns.kdeplot(d.loc[:,'Diameter'],cumulative=True)

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')]

sns.distplot(d.loc[:,'Diameter'],kde=False,color="r")

sns.kdeplot(d.loc[:,'Diameter'],cumulative=True)

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

pengguanjun commented 5 years ago

default

default

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']

plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题,或者转换负号为字符串

import seaborn as sns
sns.set_style("darkgrid",{"font.sans-serif":['KaiTi', 'Arial']}) #这是方便seaborn绘图得时候得字体设置

sns.set( palette="muted", color_codes=True)

rs = np.random.RandomState(10)

d = rs.normal(size=100)

d = pd.read_csv('c:/Users/MaiBenBen/Desktop/kde/nicetable.csv',encoding='gbk')

d = pd.read_csv('nicetable.csv')

d.sorted_values('Area',inplace=True,ascending=True)

d = pd.read_csv('c:\Users\MaiBenBen\Desktop\nicetable.csv',usecols=['Area'],encoding='gbk')

d.loc[:,'Area']

sns.distplot(d.loc['Area']

f, axes = plt.subplots(3, 2, figsize=(7, 7), sharex=True)

f, ax = plt.subplot(figsize=(图像宽度,图像高度))

f, ax = plt.subplots( figsize=(7,7))

sns.distplot(d.loc[:,'Diameter'], kde=False, color="b", ax=axes[0, 0])

plt.title('Cumulative Density Plot of Rock Fragmentation', fontsize=22)

plt.title('Histgram of Rock Fragmentation', fontsize=22)

sns.distplot(d.loc[:,'Area'], hist=False, rug=True, color="r", ax=axes[0, 1])

sns.distplot(d.loc[:,'Diameter'], hist=False, color="g", kde_kws={"shade": True}, ax=axes[0, 1])

sns.distplot(d.loc[:,'Diameter'], color="m", ax=axes[1, 0])

sns.kdeplot(d.loc[:,'Diameter'],cumulative=True, ax=axes[1, 1])

sns.distplot(d.loc[:,'Diameter'], color="m", ax=axes[2, 0])

sns.kdeplot(d.loc[:,'Diameter'],cumulative=True, ax=axes[2, 1])

sns.distplot(d.loc[:,'Diameter'],kde=False,color="r")

sns.kdeplot(d.loc[:,'Diameter'],cumulative=True)

Decoration

plt.suptitle('爆破块度累积分布曲线', fontsize=22)

axes[0,0].set_title('333')

axes[0,1].set_title('4444')

axes[1,0].set_title('55555')

axes[1,1].set_title('666666')

axes[2,0].set_title('7777777')

axes[2,1].set_title('88888888')

group_labels = ['0', '20%','40%','60%', '80%','100%']

group_labels = ['0', '10%', '20%','30%','40%','50%','60%', '70%','80%','90%','100%']

ax.set_yticklabels()

ax.set_yticklabels(group_labels,#设置刻度对应的标签 rotation=0, fontsize='small')#rotation选项设定x刻度标签倾斜30度。

ax.xaxis.set_ticks_position('bottom')

plt.ylim(-1.5,1.5)

plt.xlim(0, 150)

plt.xlabel('size (cm)') plt.ylabel('Passing(%)') #只有最后一个图有改变

plt.legend()

d.plot(legend=False)

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']

plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题,或者转换负号为字符串

import seaborn as sns
sns.set_style("darkgrid",{"font.sans-serif":['KaiTi', 'Arial']}) #这是方便seaborn绘图得时候得字体设置

sns.set( palette="muted", color_codes=True)

rs = np.random.RandomState(10)

d = rs.normal(size=100)

d = pd.read_csv('c:/Users/MaiBenBen/Desktop/kde/nicetable.csv',encoding='gbk')

d = pd.read_csv('nicetable.csv')

d.sorted_values('Area',inplace=True,ascending=True)

d = pd.read_csv('c:\Users\MaiBenBen\Desktop\nicetable.csv',usecols=['Area'],encoding='gbk')

d.loc[:,'Area']

sns.distplot(d.loc['Area']

f, axes = plt.subplots(3, 2, figsize=(7, 7), sharex=True)

f, ax = plt.subplot(figsize=(图像宽度,图像高度))

f, ax = plt.subplots( figsize=(7,7))

sns.distplot(d.loc[:,'Diameter'], kde=False, color="b", ax=axes[0, 0])

plt.title('Cumulative Density Plot of Rock Fragmentation', fontsize=22)

plt.title('Histgram of Rock Fragmentation', fontsize=22)

sns.distplot(d.loc[:,'Area'], hist=False, rug=True, color="r", ax=axes[0, 1])

sns.distplot(d.loc[:,'Diameter'], hist=False, color="g", kde_kws={"shade": True}, ax=axes[0, 1])

sns.distplot(d.loc[:,'Diameter'], color="m", ax=axes[1, 0])

sns.kdeplot(d.loc[:,'Diameter'],cumulative=True, ax=axes[1, 1])

sns.distplot(d.loc[:,'Diameter'], color="m", ax=axes[2, 0])

sns.kdeplot(d.loc[:,'Diameter'],cumulative=True, ax=axes[2, 1])

sns.distplot(d.loc[:,'Diameter'],kde=False,color="r")

sns.kdeplot(d.loc[:,'Diameter'],cumulative=True)

Decoration

plt.suptitle('爆破块度累积分布曲线', fontsize=22)

axes[0,0].set_title('333')

axes[0,1].set_title('4444')

axes[1,0].set_title('55555')

axes[1,1].set_title('666666')

axes[2,0].set_title('7777777')

axes[2,1].set_title('88888888')

group_labels = ['0', '20%','40%','60%', '80%','100%']

group_labels = ['0', '10%', '20%','30%','40%','50%','60%', '70%','80%','90%','100%']

ax.set_yticklabels()

ax.set_yticklabels(group_labels,#设置刻度对应的标签 rotation=0, fontsize='small')#rotation选项设定x刻度标签倾斜30度。

ax.xaxis.set_ticks_position('bottom')

plt.ylim(-1.5,1.5)

plt.xlim(0, 180)

plt.xlabel('size (cm)') plt.ylabel('Passing(%)') #只有最后一个图有改变

plt.legend()

d.plot(legend=False)

fig = ax.get_figure() fig.savefig('a.png', dpi=100, bbox_inches='tight') plt.show() `

pengguanjun commented 5 years ago

default default

pengguanjun commented 5 years ago

`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')]

sns.distplot(d.loc[:,'Diameter'],kde=False,color="r")

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. default