利用 python+plotly 製做Contour Plots模擬雙波源干涉現象

本人在學習使用 plotly 的contour plots 製做的時候,發現利用這個表格製做波的干涉模擬方面有很不錯的效果,由於以前被各類波動方程和振動方程教育了好久,因此就用波函數來開動,下面分享代碼,供你們參考。(我用 java 寫的代碼模擬的波函數的測試數據)html

下面是 plotly 的所有代碼,裏面包含了兩種生成 contour plots 圖表的方式,一個生成的是單個圖表,可是帶着等高線,因此被我放棄了。另一個生成是圖表矩陣,我選的row=1,cols=1的模式。java

#!/usr/bin/python
# coding=utf-8
 
import plotly.plotly
from plotly.graph_objs import *
import plotly.graph_objs as go
import plotly.tools as tool
 
z = []
with open("/Users/Vicky/Documents/workspace/fission/long/intervene.log") as apidata:
    for i in apidata:
        data = i.split("\n")[0].split(",")
        z.append(data)
'''
#這是單獨一個表格的狀況,但沒找到去掉等高線的方法
data = Data([
    Contour(
        z=z,
        contours = dict(
            coloring="heatmap"
        )
    )
])
plotly.offline.plot(data,filename="3333.html")
'''
data = {
    'z': z,
    'connectgaps': True,
    'type': 'heatmap',
    'zsmooth': 'best',
    'showscale': True
}
fig = tool.make_subplots(rows=1, cols=1)
fig.append_trace(data, 1, 1)
plotly.offline.plot(fig,filename= "3333.html")

下面是 java 生成數據的代碼:python

package practise;
 
import java.awt.Point;
import java.util.ArrayList;
import java.util.List;
import source.SourceCode;
 
public class Intervene extends SourceCode {
	public List<List<Double>> data = new ArrayList<>();
 
	public static void main(String[] args) {
		Intervene intervene = new Intervene();
		intervene.testDemo001();
	}
 
	public void testDemo001() {
		Point point1 = new Point(50, 50);
		Point point2 = new Point(150, 50);
		int lamda = 6;
		for (int i = 0; i < 100; i++) {// y 軸
			List<Double> distance = new ArrayList<>();
			for (int j = 0; j < 200; j++) {// x 軸
				Point point = new Point(j, i);
				double x = point.distance(point1) % lamda / lamda;
				double y = point.distance(point2) % lamda / lamda;
				double xx = Math.sin(x * 2 * Math.PI);
				double yy = Math.sin(y * 2 * Math.PI);
				distance.add(xx + yy);
			}
			data.add(distance);
		}
		StringBuffer content = new StringBuffer();
		int size = data.size();
		for (int i = 0; i < size; i++) {
			String text = data.get(i).toString();
			text = text.substring(1, text.length() - 1);
			if (i == 0)
				content.append(text);
			content.append(LINE + text);
		}
		logLong("intervene.log", content.toString());
	}
}

下面是生成圖表:編程

技術類文章精選

非技術文章精選

大咖風采

點擊查看公衆號地圖

相關文章
相關標籤/搜索