200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > python绘制剖面图_用python绘制剖面图

python绘制剖面图_用python绘制剖面图

时间:2024-05-25 10:27:44

相关推荐

python绘制剖面图_用python绘制剖面图

我自己为这个功能做了一个模块。在import pandas as pd

from pandas import Series, DataFrame

import numpy as np

import matplotlib.pyplot as plt

def Profile(x,y,nbins,xmin,xmax,ax):

df = DataFrame({'x' : x , 'y' : y})

binedges = xmin + ((xmax-xmin)/nbins) * np.arange(nbins+1)

df['bin'] = np.digitize(df['x'],binedges)

bincenters = xmin + ((xmax-xmin)/nbins)*np.arange(nbins) + ((xmax-xmin)/(2*nbins))

ProfileFrame = DataFrame({'bincenters' : bincenters, 'N' : df['bin'].value_counts(sort=False)},index=range(1,nbins+1))

bins = ProfileFrame.index.values

for bin in bins:

ProfileFrame.ix[bin,'ymean'] = df.ix[df['bin']==bin,'y'].mean()

ProfileFrame.ix[bin,'yStandDev'] = df.ix[df['bin']==bin,'y'].std()

ProfileFrame.ix[bin,'yMeanError'] = ProfileFrame.ix[bin,'yStandDev'] / np.sqrt(ProfileFrame.ix[bin,'N'])

ax.errorbar(ProfileFrame['bincenters'], ProfileFrame['ymean'], yerr=ProfileFrame['yMeanError'], xerr=(xmax-xmin)/(2*nbins), fmt=None)

return ax

def Profile_Matrix(frame):

#Much of this is stolen from /pydata/pandas/blob/master/pandas/tools/plotting.py

import mon as com

import pandas.tools.plotting as plots

from pat import lrange

from matplotlib.artist import setp

range_padding=0.05

df = frame._get_numeric_data()

n = df.columns.size

fig, axes = plots._subplots(nrows=n, ncols=n, squeeze=False)

# no gaps between subplots

fig.subplots_adjust(wspace=0, hspace=0)

mask = com.notnull(df)

boundaries_list = []

for a in df.columns:

values = df[a].values[mask[a].values]

rmin_, rmax_ = np.min(values), np.max(values)

rdelta_ext = (rmax_ - rmin_) * range_padding / 2.

boundaries_list.append((rmin_ - rdelta_ext, rmax_+ rdelta_ext))

for i, a in zip(lrange(n), df.columns):

for j, b in zip(lrange(n), df.columns):

common = (mask[a] & mask[b]).values

nbins = 100

(xmin,xmax) = boundaries_list[i]

ax = axes[i, j]

Profile(df[a][common],df[b][common],nbins,xmin,xmax,ax)

ax.set_xlabel('')

ax.set_ylabel('')

plots._label_axis(ax, kind='x', label=b, position='bottom', rotate=True)

plots._label_axis(ax, kind='y', label=a, position='left')

if j!= 0:

ax.yaxis.set_visible(False)

if i != n-1:

ax.xaxis.set_visible(False)

for ax in axes.flat:

setp(ax.get_xticklabels(), fontsize=8)

setp(ax.get_yticklabels(), fontsize=8)

return axes

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。