前提・実現したいこと
matplotlibのRGBで描画された画をHSV形式に変換したいです。
プログラムの中身ですが、色と形をランダムに表示し、tkinter上でbuttonを押す操作をするごとに画が更新されていくというものになります。
現在は色をランダムに発生させるためにRGBをそれぞれrandom.random()として0~1で表現させています。
ソースコードにありますように、RGBからHSVへ変えるというmatplotlib.colorsモジュールの関数であるmatplotlib.colors.rgb_to_hsv()を使用してみたのですがうまく作動せず、画像を表示させることができずにいます。
エラーメッセージ等はでてきません。
有識者の方ご教授いただけないでしょうか。
該当のソースコード
Python
1import sys 2import tkinter 3import numpy as np 4import random 5import matplotlib.pyplot as plt 6from mpl_toolkits.mplot3d import Axes3D 7from matplotlib.backends.backend_tkagg import (FigureCanvasTkAgg, NavigationToolbar2Tk) 8from matplotlib.figure import Figure 9import matplotlib.colors as mcolors 10 11 12def draw(event): 13 fig = plt.figure(figsize=(4,4)) 14 ax=fig.gca(projection='3d') 15 16 ax.set_xlim([-1., 1.]) 17 ax.set_ylim([-1., 1.]) 18 ax.set_zlim([-1., 1.]) 19 20 for a in [ax.xaxis, ax.yaxis, ax.zaxis]: 21 a.set_ticklabels([]) 22 a._axinfo['grid']['linewidth'] = 0 23 a._axinfo['tick']['linewidth'] = 0 24 25 for a in [ax.w_xaxis, ax.w_yaxis, ax.w_zaxis]: 26 a.line.set_linewidth(0) 27 a.set_pane_color((0., 0., 0., 0.)) 28 #順にRGBA 29 30 ax.set_facecolor('black') 31 32 u, v = np.mgrid[0:2*np.pi:50j, 0:np.pi:25j] 33 34 x = np.cos(u) * np.sin(v) 35 y = np.sin(u) * np.sin(v) 36 z = np.cos(v) 37 38 39 R=random.random() 40 G=random.random() 41 B=random.random() 42 43 colors = np.zeros((50, 25, 3)) 44 for i in range(0, 25): 45 for j in range(0, 25): 46 colors[i][j][0] = R 47 colors[i][j][1] = G 48 colors[i][j][2] = B 49 50 colors2=mcolors.rgb_to_hsv(mcolors.to_rgb(colors)) 51 52 ax.plot_surface(x, y, z, facecolors = colors2, shade = False) 53 54 moon=random.randint(-90,270) 55 56 ax.view_init(elev = 0, azim = moon) 57 58 canvas = FigureCanvasTkAgg(fig, master=root) 59 canvas.get_tk_widget().place(x=0,y=0) 60 61root = tkinter.Tk() 62root.geometry("800x600") 63root.wm_title("色と形をランダムに表示する") 64 65button= tkinter.Button(root, text=u'更新',width=15) 66button.bind("<Button-1>",draw) 67button.place(x=300,y=450) 68 69tkinter.mainloop()
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。