2017-05-06 18 views
0

私はmatplotlibライブラリを使ってビームのストレスをプロットしようとしています。私は式を用いて算出し、例えば、それをプロットしているmatplotlibを使って2Dグラデーション(虹)をプロットする方法は?

:図1のよう

Figure 1: Example of before and after of finite element of beam

、あなたは緑色の光が素子3でより多くのストレスを持っていることを確認し、また要素8ますしたがって、私の場合虹色のグラデーションで色を塗りつぶします。青い梁の全体が同じ色になりますが、緑色の梁は要素3と8によって異なる色になり、他の部分よりも赤い面に向かいます。ここで

example of stress plot

私のコードの一部です。私はノードの座標と、要素の応力値のすべてを知っていることがわかりますMPL

node_coordinate = {1: [0.0, 1.0], 2: [0.0, 0.0], 3: [4.018905, 0.87781], 4: [3.978008, -0.1229], 5: [1.983549, -0.038322], 6: [2.013683, 0.958586], 7: [3.018193, 0.922264], 
        8: [2.979695, -0.079299], 9: [1.0070439, 0.989987], 10: [0.9909098, -0.014787999999999999]} 
element_stress = {'1': 0.2572e+01, '2': 0.8214e+00, '3': 0.5689e+01, '4': -0.8214e+00, '5': -0.2572e+01, '6': -0.4292e+01, '7': 0.4292e+01, '8': -0.5689e+01} 

cmap = mpl.cm.jet 

fig = plt.figure(figsize=(8, 2)) 
ax1 = fig.add_axes([0.05, 0.80, 0.9, 0.15]) 
ax2 = fig.add_axes([0.05, 0.4, 0.9, 0.15]) 
# ax1 = fig.add_axes([0.2572e+01, 0.8214e+00, 0.5689e+01, -0.8214e+00, -0.2572e+01, -0.4292e+01, 0.4292e+01, -0.5689e+01]) 
norm = mpl.colors.Normalize(vmin=0, vmax=1) 
cb1 = mpl.colorbar.ColorbarBase(ax1, cmap=cmap, norm=norm, orientation='vertical') 
cb2 = mpl.colorbar.ColorbarBase(ax2, cmap=cmap, norm=norm, orientation='horizontal') 
plt.show() 

としてPLT 輸入matplotlibのよう 輸入matplotlib.pyplot。

P.S.私の文法で申し訳ありませんが、私はネイティブではありません。

ありがとうございます。提案のために。

+0

['pcolormesh'](http://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.pcolormesh.html)([example](http://matplotlib.org/examples/pylab_examples) /quadmesh_demo.html)))? – berna1111

答えて

2

このexample後、私は、これはあなたが探しているものだと思う:

import matplotlib as mpl 
import matplotlib.pyplot as plt 
import matplotlib.tri as tri 
import numpy as np 

node_coordinate = {1: [0.0, 1.0], 2: [0.0, 0.0], 3: [4.018905, 0.87781], 
        4: [3.978008, -0.1229], 5: [1.983549, -0.038322], 
        6: [2.013683, 0.958586], 7: [3.018193, 0.922264], 
        8: [2.979695, -0.079299], 9: [1.0070439, 0.989987], 
        10: [0.9909098, -0.014787999999999999]} 
element_stress = {1: 0.2572e+01, 2: 0.8214e+00, 3: 0.5689e+01, 
        4: -0.8214e+00, 5: -0.2572e+01, 6: -0.4292e+01, 
        7: 0.4292e+01, 8: -0.5689e+01} 

n = len(element_stress.keys()) 
x = np.empty(n) 
y = np.empty(n) 
d = np.empty(n) 

for i in element_stress.keys(): 
    x[i-1] = node_coordinate[i][0] 
    y[i-1] = node_coordinate[i][1] 
    d[i-1] = element_stress[i] 

triang = tri.Triangulation(x, y) 

cmap = mpl.cm.jet 
fig = plt.figure(figsize=(8, 4)) 

ax1 = fig.add_axes([0.05, 0.80, 0.9, 0.15]) 
ax1.tricontourf(triang, d, cmap=cmap) 

ax2 = fig.add_axes([0.05, 0.4, 0.9, 0.15]) 
x_2 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
     0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
y_2 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
d_2 = x_2[:] 
triang_2 = tri.Triangulation(x_2, y_2) 
ax2.tricontourf(triang_2, d_2, cmap=cmap) 

fig.show() 

enter image description here

与えられたデータから得られたグラフは同じではありませんように、第2の例は、明確化のために追加されましたComsolからあなたが得たように。

関連する問題