つれづれなる備忘録

日々の発見をあるがままに綴る

SymPyの使い方21 ~ plottingモジュール2

 前回はSymPyのplottingモジュールを用いては簡単な2次元のプロットについて紹介したが、今回は3次元プロットとパラメトリックプロットについて紹介する。

atatat.hatenablog.com

1. 3次元プロット

SymPyのplottingモジュールを用いて3dプロットを行うにはsympy.plottingplot3dを用いる。

from sympy import *
from sympy.plotting import plot3d

基本的にはplot3d内にプロットする3次元関数のシンボリック表現を記述すればよい。例えばガウシアン

\displaystyle \exp (-( x^{2}+y^{2} ) )

x,y=symbols('x y')
plot3d(exp(-(x**2+y**2)),(x,-2,2),(y,-2,2))

実行すると以下のような3次元プロットが得られる。なお(x,-2,2),(y,-2,2)はx,yの描画範囲を-2~2に指定している。

"plot3dによるガウシアン関数の3次元プロット"
plot3dによるガウシアン関数の3次元プロット

また、複数の3次元プロットを描画するには、関数をコンマ区切りで記述する。例えば上記のガウシアンとx*y/10は

plot3d(exp(-(x**2+y**2)),x*y/10,(x,-2,2),(y,-2,2))

"複数の3次元関数の3次元プロット"
複数の3次元関数の3次元プロット

なお、プロットの色変更については、surface_colorというオプションがあって以下のように設定できるが

plot3d(exp(-(x**2+y**2)),(x,-2,2),(y,-2,2),surface_color="red")

グリッドの線色が変更するのみ。表面のテクスチャ、カラーマップは直接変更できるオプションがない。

2. パラメトリックプロット

 次にパラメトリックプロットの方法について紹介する。まず2次元のパラメトリックプロットはplot_parametricを使用する。 基本的にはxのパラメトリック表現:x(u),yのパラメトリック表現:y(u)を記述する。例えば半径1の円:x=cos(u),y=sin(u)は

from sympy.plotting import plot_parametric
u=symbols('u')
plot_parametric(cos(u),sin(u),(u,0,7),size=(4,4))

なおデフォルトのアスペクト比だと楕円に見えるため出力サイズをsize=(4,4)として指定することで正円に見える。

"2次元パラメトリックプロット"
2次元パラメトリックプロット

3次元のパラメトリックプロットはplot3d_parametric_lineを使用する。2次元と同じようにxのパラメトリック表現:x(u),yのパラメトリック表現:y(u),zのパラメトリック表現:z(u),を記述する。 プロットする線色を変更するにはline_colorを用いて指定する。以下はline_color="red"として赤に変更、またサイズもx,y,zのサイズが同じになるようにsize=(5,5,5)とした。

from sympy.plotting import plot3d_parametric_line
plot3d_parametric_line(cos(u),sin(u),u,(u,-5,5),line_color="red",size=(5,5,5))

"3次元パラメトリックプロット"
3次元パラメトリックプロット

パラメトリックプロットで複数の関数を表示するには(x1(u),y1(u),z1(u), (u,min2,max2)),(x2(u),y2(u),z2(u), (u,min2,max2))といった方法で記述する。

plot3d_parametric_line((cos(u),sin(u),u,(u,-5,5)),(0.5*sin(u),0.5*cos(u),0.5*u,(u,-5,5)),size=(5,5,5))

"複数の3次元パラメトリックプロット"
複数の3次元パラメトリックプロット

3. まとめ

 SymPyのplottingモジュールを用いたプロット方法について紹介してきた。シンボリックな関数表現から直接プロットを作成できるとい利便性の一方で、プロットの体裁を整えるには機能が限定されているため、例えば事前確認はSymPyのplottingを使い、レポート用はmatplotを使うなどの使い分けするというのがよさそうだ。

今週のお題「下書き供養」

f:id:ATATAT:20210410111210p:plain:w600

今週のお題「下書き供養」

今週のお題は「下書き供養」。実は、書きかけで眠っている記事というのはほとんどなくて、唯一はてなブログMarkdown編集で書き始めたときのMarkdown編集のコードやはてな記法、HTMLスクリプトなど自分用のテストとして残しているものがある。ということでMarkdown編集に使えるテストコードを下書き放出したいと思う。

Markdown編集テストコード

### 大見出し
#### 中見出し
##### 小見出し
標準

<b>太字</b> <i>斜体</i> <u>アンダーライン</u> <span style="color: #ff0000"></span>

埋め込み
[https://www.hatena.ne.jp/:embed:cite]
URL表示
[https://www.hatena.ne.jp/]
> 引用
((ここに脚注を書きます))

コマンド ` pinMode(LED_BUILTIN,OUTPUT);`

~~取り消し線~~

数式Tex

[tex:x+y=z]

[tex:x^ n+y^ n=z^ n]

[tex: a=\cos^ 2\theta]

[tex: \displaystyle{f(x)=\frac{\sin x}{x}}]

<span style="font-size: 200%">&int;</span><sub>a</sub><sup>b</sup>

<div>
<span style="position:relative;content: '';top: 100%;left: 0 ;border: none;border-bottom: solid 15px transparent;border-right: solid 20px rgb(149, 158, 155);"><span style="position: relative;left:10px;padding: 0.5em;background: #a6d3c8;color: white;">美しい見出し</span></span>
</div>
<br>

<span style="position: relative;content: '';border: none;border-bottom: solid 15px transparent;border-right: solid 20px rgb(149, 158, 155);"></span>
<span style="position: relative;left:-20px;top:-8px;padding: 0.5em;background: #a6d3c8;color: white;">美しい見出し!!!!!!!!!!</span></span>
<br><br>
<span style="position: relative;content: '';border: none;border-bottom: solid 15px transparent;border-right: solid 20px rgb(149, 158, 155);"></span>
<span style="position: relative;left:-1.2em;top:-0.5em;padding: 0.5em;background: #a6d3c8;color: white;">美しい見出し!!!!!!!!!!</span></span>
<br><br>


<span style="font-size:3em;text-align:center;line-height:0.95em;font-weight:bold;color: #FF6F00;text-shadow:0 0.01em 0 #999,0 0.02em 0 #888,0 0.03em 0 #777,0 0.04em 0 #666,0 0.05em 0 #555,0 0.06em 0 #444,0 0.08em 0 #000;">TEST</span>



[https://gilbert.ninja-web.net/math/mathjax3.html:title]

<script type="text/x-mathjax-config">
MathJax.Hub.Config({
  tex2jax: {
    inlineMath: [ ['$','$'], ['\\(','\\)'] ],
    processEscapes: true
  },
  TeX: {
    extensions: ["mhchem.js"]
  },
  CommonHTML: {
    matchFontHeight: false
  }
});
</script>
<script type="text/javascript" async
  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_CHTML">
</script>

$\ce{H2O}$

$\ce{[Cu(NH3)4]^2+}$

$\ce{Ag+ + Cl- -> AgCl v}$

大見出し

中見出し

小見出し

標準

太字 斜体 アンダーライン 

埋め込み www.hatena.ne.jp URL表示 https://www.hatena.ne.jp/

引用 *1

コマンド pinMode(LED_BUILTIN,OUTPUT);

取り消し線

数式Tex

x+y=z

x^ n+y^ n=z^ n

 a=\cos^ 2\theta

 \displaystyle{f(x)=\frac{\sin x}{x}}

ab

美しい見出し


美しい見出し!!!!!!!!!!

美しい見出し!!!!!!!!!!

TEST

MathJaxの使い方〈化学編〉

$\ce{H2O}$

$\ce{[Cu(NH3)4]^2+}$

$\ce{Ag+ + Cl- -> AgCl v}$

*1:ここに脚注を書きます

ブログデザイン備忘録 ~ サーチコンソールのCLS問題(PC)、検証完了

f:id:ATATAT:20210409193812p:plain:w600

前回のCLS改善の残り28ページの再検証を開始してから、2日程度で0件になって検証は合格になった。

atatat.hatenablog.com

ページ数が少なかったこととCLS自体も0.11のページが対象だったため、短期間でページ閲覧数(フィールドデータ)が集まってCLSが0.1を切って合格したと考えられる。

"CLS要改善検証結果"
CLS要改善検証結果

"CLS要改善推移"
CLS要改善

今回の対策としてはレイアウトシフトが発生しそうなグローバルメニューのプルダウンの停止、あとサイドバーの文字サイズが大きく画面サイズによって崩れるので、少し小さくしたというところが主な変更点だった。