光の3原色の勉強ついでに3次元RGBプロットしてみた

# 概要
色に興味を持ちまして、RGBの様々な組み合わせの色をパッと把握する図を作りたいなーとググってたら、下記発見しまして

https://stackoverflow.com/questions/40853556/3d-discrete-heatmap-in-matplotlib
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237551/63298d2a-ff04-dbbb-71c2-d5b370ad6460.png)

「何これカッコいい！」といてもたってもいられず、3次元プロットをやってみました
（すでに目的がずれている）

これを参考にplot_surfaceを使ったんですが、くすんだ色になってしまい、これが解決できず・・。
（[cmap使えばきれいな色出てそう](https://matplotlib.org/stable/gallery/mplot3d/surface3d.html)なんですが、colorやfacecolorで指定するとダメでした）

諦めて最後はscatterに落ち着いたのが悲しいところですが、何かの役に立てばとコードを残しておきます
（徒労に終わった感を少しでも払拭したい・・・）

# plot_surface
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237551/a5a610d7-5ed9-20a9-9403-05c96c4473e5.png)

colorでRGBA指定すると、くすんだ色になってしまいました。
例えば、右下のところは[0.9, 0.9, 0, 1]なので黄色になるはずなんですが、めっちゃ暗い色になってるんですよね。。。（丸くてきれいな黄色は、確認用の普通のplotです）

```python
    import matplotlib.pyplot as plt
    import numpy as np

    plt.close(1)
    fig = plt.figure(1, figsize=(12, 8))
    ax = fig.add_subplot(1, 1, 1, projection="3d")

    ystep = 1 / 10
    zstep = 1 / 10
    Y = np.arange(0, 1, ystep)
    Z = np.arange(0, 1, zstep)
    alpha = 1
    for x in [0.0, 0.5, 1]:
        for y in Y:
            for z in Z:
                color = [x, y, z, alpha]
                y1 = y
                y2 = y + ystep
                z1 = z
                z2 = z + zstep
                y_mesh, z_mesh = np.meshgrid([y1,y2], [z1, z2])
                x_for_yz = np.ones_like(y_mesh) * x
                
                surf = ax.plot_surface(    # くすんだ色になる 解決できず
                    X=x_for_yz,
                    Y=y_mesh, 
                    Z=z_mesh,
                    color=color,
                    linewidth=0, 
                    antialiased=False
                )
    ax.set_xlabel('x: Red', color='red')
    ax.set_ylabel('y: Green', color='green')
    ax.set_zlabel('z: Blue', color='blue')
    ax.tick_params(axis='x', color='red', labelcolor='red')
    ax.tick_params(axis='y', color='green', labelcolor='green')
    ax.tick_params(axis='z', color='blue', labelcolor='blue')

    # こっちだときれいな発色
    ax.plot([1], [1], marker='o', markersize=20,
        color=[1, 1, 0, alpha], )
    ax.plot([1], [0], marker='o', markersize=20,
        color=[1, 0, 0, alpha], )
    ax.plot([1], [0.6], marker='o', markersize=20,
        color=[1, 0.6, 0, alpha], )
```



# scatter
x軸：Red
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237551/8c88ae98-3eac-f9ba-29cd-52ed9cee0812.png)

x軸：Green
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237551/c4658a39-23aa-61ab-b95b-6ec647c3e370.png)

x軸：Blue
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237551/0402e425-b144-8c2c-4dc4-0fcabdddd6c0.png)


こっちはきれいな色出てますね

```python
    import matplotlib.pyplot as plt
    import numpy as np
    
    dct = {0:0, 1:1, 2:2}  # x: red
#    dct = {0:2, 1:0, 2:1}  # x: green
#    dct = {0:1, 1:2, 2:0}  # x: blue

    plt.close(1)
    fig = plt.figure(1, figsize=(12, 8))
    ax = fig.add_subplot(1, 1, 1, projection="3d")
    Y = np.arange(0, 1, 1 / 10)
    Z = np.arange(0, 1, 1 / 10)
    alpha = 1
    for x in [0.0, 0.5, 1]:
        for y in Y:
            for z in Z:
                rgba = [x, y, z, alpha]
                color = [rgba[dct[0]], rgba[dct[1]], rgba[dct[2]], rgba[3]]
                ax.scatter(x, y, z,
                    color=color, marker='s', s=20*4
                    )
    xcolor = [0, 0, 0, 1]
    ycolor = [0, 0, 0, 1]
    zcolor = [0, 0, 0, 1]
    for i in [0, 1, 2]:
        if dct[i]==0: xcolor[i] = 1
        if dct[i]==1: ycolor[i] = 1
        if dct[i]==2: zcolor[i] = 1
            
    ax.set_xlabel('x', color=xcolor)
    ax.set_ylabel('y', color=ycolor)
    ax.set_zlabel('z', color=zcolor)
    ax.tick_params(axis='x', color=xcolor, labelcolor=xcolor)
    ax.tick_params(axis='y', color=ycolor, labelcolor=ycolor)
    ax.tick_params(axis='z', color=zcolor, labelcolor=zcolor)
```

終わり