pythonを便利に使おう第六回！線図編！

#初めに
　どこかの入試問題だったか定期テスト問題だったかで、面白い線図の問題が出たことをたった今になって思い出したところ、その線図の最終的な答えが確か、ドラえもんになったのを覚えています。今回はとりあえずmatploblibで簡単な線図が出来るようになるのを目指します。
#線図
　線図の重要性は、そのほとんどの概念が現実世界と鏡写しに出来ることから、簡単に理解できます。例えば、機械の設計では細かく素材の長さを設定し、その図形によって、「この角度であれば、この材質のものではこれほど耐えることが出来る」などを導き出すことができます。線図とはやはり手書きで、人の手で思考のままに手掛けるべきなのでしょうが、便利になるならばそれに越したことはありません。
##第一問　円の線図

　円の関数は以下のとおりですね。

```math
r=x^2+y^2
```

　半径を1と仮定し、xの配列からyを求めて、それをmatplotlibで表示できるか試みます。

```python
import numpy as np
import matplotlib.pyplot as plt
xs = np.arange(-100,100)*0.01
ys = np.sqrt(1-xs**2)
plt.scatter(xs,ys)
plt.show()
```

![Figure_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1045854/d49a83da-b34c-10f8-fcdf-b92b093c9f7e.png)
　平方根は正の値しか出す気がないようです。ならば、マイナスをかければいい話。

```python
import numpy as np
import matplotlib.pyplot as plt
xs = np.arange(-100,100)*0.01
ys = np.sqrt(1-xs**2)
plt.scatter(xs,ys)
plt.scatter(xs,-ys)
plt.show()
```

![Figure_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1045854/dd21c6de-24d2-1f74-5365-41271755ff76.png)

　んー、綺麗には見えませんね。
　それに色も違いますし。そこら辺も考慮して再編集。

```python
import numpy as np
import matplotlib.pyplot as plt
xs = np.arange(-100,100)*0.01
ys = np.sqrt(1-xs**2)
x=np.append(xs,xs)
y=np.append(ys,-ys)
plt.plot(x,y)
plt.show()
```

 ![Figure_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1045854/ce3fa47d-e0fc-3a09-0931-d81c83468f44.png)
　なんだか面白い形になりましたねw
　「e」と見えなくもない。これはつまり、xとyの順番が間違っているのでしょう。それを修正します。

```python
import numpy as np
import matplotlib.pyplot as plt
xs = np.arange(-100,100)*0.01
ys = np.sqrt(1-xs**2)
x=np.append(xs,xs[::-1])
y=np.append(ys,-ys[::-1])
plt.plot(x,y)
plt.show()
```

![Figure_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1045854/e116488c-e57c-0ef1-fc38-50e597e8bab3.png)
　ずいぶんと円に近いかたちになりましたね。これを完璧に近づけるには、もうすこしxsの値を細かくわけなくてはいけませんね。

```python
import numpy as np
import matplotlib.pyplot as plt
xs = np.arange(-100,100,0.0001)
ys = np.sqrt(1-xs**2)
x=np.append(xs,xs[::-1])
y=np.append(ys,-ys[::-1])
plt.plot(x,y)
plt.show()
```

![Figure_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1045854/f0b53d75-c590-6a70-c63a-7ad4799cb74e.png)
　深く求めすぎるのも行けないので、この円はこの程度で済ませておきましょう。テスト１週間前に息抜きでpythonを触っていることもあって、あまり時間は取れておらず、実験も出来なくて悲しい限りです。

##第二問　線の線図

　順番を間違えている気がしなくもありませんが、次に線を書いてみましょう。

```python
import numpy as np
import matplotlib.pyplot as plt
xs = np.arange(-100,100,0.01)
ys = np.ones(20000)
plt.plot(xs,ys)
plt.show()
```

![Figure_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1045854/10e74b98-d372-4177-1357-351341a75a1f.png)
　うーん簡単ですね。

##第三問　四角形の線図
　思ったよりも面倒くさそうですね。

```python
import numpy as np
import matplotlib.pyplot as plt
xs = np.arange(-100,100,0.01)
ys = np.ones(20000)
x=np.append(xs,xs)
y=np.append(ys,-ys)
plt.plot(x,y)
plt.show()
```

![Figure_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1045854/a5dc7c89-6c01-866d-537d-3f4f9bf030d8.png)
　今度はZかーw
　このままだったら、図形よりもアルファベットを先に揃えれてしまいそうですね。

```python
import numpy as np
import matplotlib.pyplot as plt
xs = np.arange(-100,100,0.01)
ys = np.ones(20000)
x=np.append(xs,xs[::-1])
y=np.append(ys,-ys[::-1])
plt.plot(x,y)
plt.show()
```

![Figure_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1045854/9f9d80d8-3a3d-493a-3243-ba6df1adbaa6.png)
 コ、とかいて、口を閉じていませんね。これはたった一つ点を追加することで解決できそうですが…ちょいまて、これはもう少し楽にできそうだ。

```python
import numpy as np
import matplotlib.pyplot as plt
xs = np.array([1,2,2,1,1])
ys = np.array([1,1,2,2,1])
plt.plot(xs,ys)
plt.show()
```

![Figure_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1045854/1b9b8573-cf6f-d597-347f-50fbd1b91193.png)

#最後に
　もう少し楽な方法がないのだろうかと、調べてみれば、案の定、今回表示するために努力した丸とか四角とかを表示するためのメソッドが予め存在していました。線の線図は確認していませんがきっとあるのでしょう。
　次回の第七回ではこれらを利用してドラえもんでも書いてみようと思います。以上です。