技術屋にゃん兵衛のてくてくらぼ by データウィズ [DataWith]

気の向くままソフトについて書いてます。バリバリエンジニアではないのであくまでも初心者目線で。

グラフ作成ソフトVeuszで科学的グラフを書く(棒グラフ2)― 2値の場合

グラフ作成ソフトVeuszで科学的グラフを書く(棒グラフ2)― 2値の場合

 

では、Excelでもよく使う2値の棒グラフを作ってみます。

データはこれ。

都市名

数量1

数量2

東京

1600

600

横浜

800

700

大阪

1000

900

名古屋

900

900

神戸

800

1100

福岡

1000

800

仙台

700

900

札幌

800

500

 

毎度ですが、インポートしたところから。

  1. 「Add bar」をします。「Length」を「数量1」にするとバーが出てきます。

    まずは普通の棒グラフ

  2. もう一つのデータを読み込ませるには「Length」の値の右にある小さな「+」をクリックします。ここに「数量2」を入れます。

    これだけで基本はよさそうですが、右側が切れていたり、間隔にメリハリがなかったりで、調整する必要があります。

    2値を表示
  3. まずは、X軸方向の表示の調整とラベル、目盛り処理をします。

    X軸の「Properties」

    ・「Min/Max」:「0.3/8.8」

    ・「Mode」:「labels」

    Y軸の「Properties」

    ・「Min/Max」:「0/1700」

    「bar 1」の「Properties」

    ・「labels」:「都市名」

    に設定します。

    X軸の「Formatting」で「Major ticks」と「Minor ticks」の目のアイコンをクリックして表示されなくすると、次のようになります。

    目盛の調整とラベルの表示
  4. バーの間隔をもう少し調整します。バーをもう少し細くして、くっつけたい。

    「bar 1」の「Formatting」パネルで、「Group fill」を「0.5」にすると次にようになります。

    「Bar fill」はバー1本ずつの横幅の設定を指し、「Group fill」は2本合わせたバーの幅を指しています。

    今回はY軸にグリッド線を入れようと思います。

    Y軸の「Formatting」の「Grid line」タブの目のアイコンを有効にします。

    最終的な2値の棒グラフ

見栄えよくなったかな。

グラフ作成ソフトVeuszで科学的グラフを書く(棒グラフ1)― 基本

グラフ作成ソフトVeuszで科学的グラフを書く(棒グラフ1)― 基本

 

折れ線グラフは一旦前回で終わり、今回からは棒グラフに入ります。

まずは折れ線グラフの第1回で使ったデータを棒グラフで描画します。

 

いつも通りデータをインポートしたところから。

 

  1. 「Insert」->「Add bar」(ツールバーにも棒グラフのアイコンがある)を選択します。
    「Properties」パネルで次のように設定します。
    Length(バーの長さ):「y値」
    Position(X方向の位置):「x値」

    Veuszで棒グラフを書いたところ

    Veuszで棒グラフを書いたところ
  2. これでは両端が欠けてうまくありません。「Editing」でX軸を選んで、「Properties」の「Min/Max」を「0/8」とします。

    棒グラフのX軸の範囲を変更
  3. あと、上も余白が欲しいし、Y軸が0から始まっていない。
    なので、Y軸の「Properties」で「Min/Max」を「0/4」に変えたら次のようになりました。
    バーの色などは、折れ線グラフのところで説明したように「Formatting」パネルで行います。

    棒グラフのY軸の範囲を変更


     

    次は、X軸のデータが文字列の場合をやってみます。
    データはこれ。

    都市名

    数量

    東京

    1600

    横浜

    800

    大阪

    1000

    名古屋

    900

    神戸

    800

    福岡

    1000

    仙台

    700

    札幌

    800

  4. インポートして、まずは素直に「Add bar」をします。「Length」を「数量」にするとバーは出た。

    データの読み込み後


    しかし、X軸に都市名を出すためには、「Positions」に「都市名」がないといけないのだが出てこない。
  5. ツリーから「x」を選んで、X軸の「Properties」の「Mode」を「numeric」から「labels」に変えます。次に、ツリーから「bar 1」を選んで、「Properties」の「Labels」で「都市名」を選ぶと次のようにできました。

    X軸に地名(ラベル)を表示

    上下左右の余白を調整します。Y軸が600からなのでゼロにします。
    Y軸:「Min」を「Auto」から「0」に変更、「Max」を「Auto」から「2000」に変更
    X軸:「Min」を「Auto」から「0.3」に変更、「Max」を「Auto」から「8.8」に変更

     

    また、X軸のメモリが不要なので、消します。
    X軸の「Formatting」で「Major ticks」と「Minor ticks」の目のアイコンをクリックして表示されなくします。

最終結果はこれです。どうでしょうか。

棒グラフの最終結果

さすがにこの程度のグラフではExcelのほうが簡単にできそうです。

グラフ作成ソフトVeuszで科学的グラフを書く(折れ線グラフ3)― 折れ線グラフでエラーバーを付ける

グラフ作成ソフトVeuszで科学的グラフを書く(折れ線グラフ3)― 折れ線グラフでエラーバーを付ける

 

「折れ線グラフ1」の回で使ったデータを使って、エラーバーを追加する方法です。

折れ線グラフが書かれているところから始めよう。

  1. 一定の長さのエラーバーをグラフに追加する場合、下のように各データの後ろに「,」+数値を入れればできます。例では、「0.1」を指定したので、上下に「0.1」の長さのエラーバーが表示されました。

    Vueszのエラーバーの定義(固定値)

    Vueszのエラーバーの定義(固定値)


  2. 数字ではなく、式での指定もできる。2%のエラーバーを表示するのであれば、「Y data」を「y値,(y値*0.02)」と指定すれば次のようになる。

    Vueszのエラーバーの定義(%値)

    Vueszのエラーバーの定義(%値)

「Formatting」パネルで、色や線種などを変更することができるが、両端にマークを付けたりすることはできなさそう。

今回は短いけど、これまで。

 

グラフ作成ソフトVeuszで科学的グラフを書く(折れ線グラフ2)― 折れ線グラフを2本書く

グラフ作成ソフトVeuszで科学的グラフを書く(折れ線グラフ2)― 折れ線グラフを2本書く

 

折れ線グラフを1つ書くのは大体わかりました。では、2本書いてみます。軸は同じとします。

データは:

x値

y1値

y2値

1

2.45

2.1

1.5

2.87

2.67

2

3.25

3.12

2.5

3.01

3.08

3

2.67

2.88

3.5

2.77

2.77

4

2.79

2.83

4.5

2.93

3.04

5

3.1

3.22

5.5

3.21

3.34

6

3.17

3.2

6.5

3.01

3.12

7

2.89

3.03

 

インポートの手順は前回と同じなので省略。

インポート確認画面
  1. 前回と同じ手順でいきなり「Insert」->「Add xy」をやってみる。「Properties」パネルで「X data = x値」「Y data = y1値」は同じ。

    最初の折れ線グラフ

    最初の折れ線グラフ
  2. 2つ目のデータを追加するには、(今度はツールバーのボタンを使ってみる)ツールバーの「Plot point with lines and error bars(星4つのアイコン)」をクリックします。

    そして、「Properties」パネルで「X data = x値」「Y data = y2値」とします。

    Vueszで2本の折れ線グラフを表示

    Vueszで2本の折れ線グラフを表示

    これで出来上がり。あとは、それぞれのグラフのスタイルを変えるだけなので簡単です。

    では、次にY軸を2本にします。データを変えて。

  3. 1つ目のグラフは従来通り。次にY軸を追加します。今度は「y2」の値が20~40の範囲なので軸のMin/Maxをそのように設定します。

    「Insert」->「Axis」->「Add Axis」を選択します。Labelを「y2値」とし、範囲を入れ、Y軸なので「vertical」にします。

    2つめのY軸の定義
  4. ツールバーの「Plot point with lines and error bars(星4つのアイコン)」をクリックします。Vueszのオブジェクトの上から順番に処理されていくので、ツリー内の順番に注意してください。「xy2」は、新しく作成したY軸オブジェクト「axis 1」の下にある必要があります。その結果が次。

    2つのY軸を持つ折れ線グラフ

    2つのY軸を持つ折れ線グラフ
  5. どちらの軸が何か、グラフはどちらの軸を使うか、などわかりにくいのでもう少し調整しましょう。

    画面では、左の軸が「y2」です。右の軸が「y1」と分かるようにラベルを付けます。オブジェクトのツリーの「y」をクリックして、軸を選択し、ラベル「y1値」つけます。

    両方のY軸にラベルを表示
  6. これで軸はわかるようになりましたが、折れ線がどちらの軸を使うかをわかるようにしたい。

    1つ目の方法は、グラフの「Labels」で、例えば「y1値」などを指定すると、各データに数値が出てきます。

    各点にデータを表示
    2つ目の方法は、値ではなく、文字を付ける方法。ボタンが小さいので見落としがち。

    各点にラベルを表示

    各点にラベルが付くのがいやなときは、3番目の方法。単純にテキストをレイアウトします。

    「Insert」->「Add label」(またはツールバーの「ab」アイコン)を選択します。

    ラベルボックスの作成

    のように小さな黒い四角が表示されます。

    右のパネルの「Label」に「y1値(右軸)」と入力します。このテキストは自由に移動できるので、お好きな場所に。「y2値」も同じようにします。

    ラベルを入力し移動
  7. 最後に少しだけグリッド線を入れれば次のようになりました。

    Vueszでできた2軸の折れ線グラフ

    Vueszでできた2軸の折れ線グラフ

結構使えるな、と感じ始めてきているので、もっといろいろ試していきたいです。

 

では次回。

グラフ作成ソフトVeuszで科学的グラフを書く(折れ線グラフ1)― まずは折れ線グラフ

さて復帰2回目。

 

グラフ作成ソフトVeuszで科学的グラフを書く(折れ線グラフ1)― まずは折れ線グラフ

 

今回のデータはこの.csvファイル。日本語のラベルもきちんとできる。

x値

y値

1.00

2.45

1.50

2.87

2.00

3.25

2.50

3.01

3.00

2.67

3.50

2.77

4.00

2.79

4.50

2.93

5.00

3.10

5.50

3.21

6.00

3.17

6.50

3.01

7.00

2.89

 

  1. 「Data -> Import」を選びます。

    Vueszでのデータの取り込み

    Vueszでのデータの取り込み
  2. データ形式もきちんと判断しているし、細かな設定もできるインポート画面。右下の「Import」をクリックします。

    Vueszのインポート確認

    Vueszのインポート確認
  3. 画面が閉じないのでそこは少し違和感があるんですが、メイン画面には次のようにデータセットが取り込まれています。邪魔なので「Close」を押して、インポート画面を閉じます。

    データセットとしてインポートされた
  4. 「Insert」メニューから「Add xy」を選択して、プロット画面を定義します。

    「Insert」をするということは、左側のオブジェクトのツリーにグラフのオブジェクトを追加するということ。

  5. 左側のパネルの「Properties」で「X data = X値」「Y data = Y値」と定義します。

    XYプロットの「Properties」

    XYプロットの「Properties」
  6. すると折れ線グラフが表示されました。

    Vueszの折れ線グラフ

    Vueszの折れ線グラフ
  7. このままでは使えないので、いろいろ触ります。まずは軸ラベルをつけますか。あと、軸の範囲も。ということで、Y軸から。オブジェクトのツリーかグラフの中でY軸を選択してハイライトします。すると、左のペインに軸のプロパティを設定するパネルが開きます。

     

    Y軸の定義
  8. 「Label」に「Y軸」、「Min」に「0」、「Max」に「5」を入れると、次のようになりました。X軸を変える時も同じ。

    Y軸の定義
  9. 折れ線グラフのスタイル(マーカーや線)を変えます。折れ線やマーカーをクリックすると左に「Formatting」というパネルが表示されます。

    マーカー等の設定
  10. 今回はマーカーを四角にして黒とし、少し小さくします。

    マーカー等の設定

ほかにも設定できますが、とりあえずは終了。

「Formatting」部分のタブの意味だけ並べておきます。かなり細かく設定できます。左のタブから:

  • 全体(簡易な設定)
  • 折れ線グラフの線
  • 折れ線グラフのマーカーの輪郭
  • 折れ線グラフのマーカーの塗りつぶし
  • 折れ線グラフのエラーバーの線のスタイル
  • 折れ線グラフの線の下の塗りつぶし
  • 折れ線グラフの線の上の塗りつぶし
  • 軸ラベルのスタイル

設定も変えてもグラフに表示・反映されない場合、例えば「Fill 1」などの横にある、目のアイコンをクリックしてみてください。

「Formatting」はまた出てきます。

ではまた。

グラフ作成ソフトVeuszで科学的グラフを書く(はじめに)

しばらくあまり時間ががなくて、書けませんでしたが、久々の更新です。

原稿は少し貯めたので、少しずつアップします。

 

グラフ作成ソフトVeuszで科学的グラフを書く(はじめに)

 

科学系のグラフを書くにはExcelでは不足です。ただ、数回書くだけのために、Pythonを使ってコードを書くのか(matplotlinやgnuplotとか)、というとそれも面倒。

「科学用のグラフを作成するパッケージソフトをこの数回のために買うのか」というのも無駄遣いかも、と思いフリーのものを探したところ、なかなかのものが見つかりました。グラフのエクスポート形式もベクターでできるのもいいです。

 

それは「Veusz」というものです。「ビューズ」と読むそうです。「Views」にかけたらしいです。作った人は、ドイツのマックス・プランク研究所(Max-Planck-Institut)のDr. Jeremy Sandersという人です。

 

「Veusz」の公式サイト:

veusz.github.io

 

「Veusz」は、かなりの部分がPythonで書かれているそうです。

https://veusz.github.io/development/

によると、(2023年9月時点)Python 2.6以降、Python 3.3以降と互換性があります(一部、C++も使用)。数値処理にはnumpyを使い、GUIはQt/PyQt5で書かれています。

matplotlibを使っていないところはなかなかです。

 

さて、インストールは、というと、非常に簡単。

 

  1. 上の公式サイトから「Download」を選んで、Windowsバイナリ版を使います(LinuxとMacOS用のバイナリやソースコードあります)。

    ダウンロードしたVueszインストーラー

    ダウンロードしたVueszインストーラー
  2. 管理者として実行します。迷わず「Next」。

    Vueszインストーラー画面1
  3. ライセンス画面は「I Agree」ですね。

    Vueszインストーラー画面2
  4. インストールパス画面は「Install」ですね。

    Vueszインストーラー画面3

    Vueszインストーラー画面4
  5. 以上で完了。

    Vueszインストーラー画面5

「READ ME」の「Plotting features」を見ると、かなりいろいろなプロットができる、とある。期待が膨らむ。

「Run Veusz」をチェックしておくと、次のメイン画面が開く。

Vueszメイン画面

Vueszメイン画面

 

アイコンもカラフルで、商用のソフトに負けないような感じ。

メニューを見てみると。。。

Vueszの「FIle」メニュー

Vueszの「Edit」メニュー

Vueszの「View」メニュー

Vueszの「Insert」メニュー

Vueszの「Data」メニュー

Vueszの「Tools」メニュー

Vueszの「Help」メニュー

ドキュメントやサンプルもあって、情報もわりとある。

うーん、いい感じ。

 

次回からグラフを書いていきます。

ChatGPT で Python のコードを書いてみた(1)

今回は ChatGPT でどれだけ正確なコードが生成されるか試してみた結果を書きます。

 

まずは、Python でいろいろ書いてみます。

良いコードを生成されるには与える「お題」を分かりやすく伝える必要があると思います。

 

今回のお題。

「座標(0, 0)から座標(x km, y km)まで、時速0kmから加速度0.5km/s2で移動するときのPythonのコードを生成して」

です。日本語ではうまく解釈できないこともあると聞いていたので、英語で次のように書きました。

「Generate Python code to move from (0, 0) to (x km, y km) by acceleration 0.5 m from zero speed」

単純に「到達するまでの時間を出して」とすると汎化計算式だけが出てくるような気がしたので、そこはあえてぼかしました。

 

その結果返ってきたものは、、、

<div style="padding: 10px; margin-bottom: 10px; border: 1px solid #333333;">
    

Here's an example Python code that simulates the movement of an object from (0,0) to (x km, y km) with an acceleration of 0.5 m/s^2 from zero speed:

import math

# Set the target coordinates (in kilometers)
x_target = 10
y_target = 5

# Set the initial conditions
x = 0
y = 0
vx = 0
vy = 0
ax = 0.5  # acceleration in x direction (m/s^2)
ay = 0.5  # acceleration in y direction (m/s^2)
dt = 0.01  # time step (in seconds)

# Loop until the target is reached
while x < x_target or y < y_target:
    # Calculate the new velocity
    vx += ax * dt
    vy += ay * dt

    # Calculate the new position
    x += vx * dt
    y += vy * dt

    # Print the current position
    print("x: {:.2f} km, y: {:.2f} km".format(x/1000, y/1000))

# Print the final time
time = math.sqrt*1

 

This code uses a while loop to update the velocity and position of the object in small time steps until it reaches the target coordinates. The velocity and position are updated using the acceleration and time step, which are both set beforehand. The final time taken to reach the target is calculated based on the distance and acceleration in each direction. The results are printed to the console.

Note that this is a simplified model and does not take into account factors such as air resistance or friction.</div> 

 

コメントだけでなく、解説や結果を出力するprint()文までついてかなり親切です。

動くかどうかは別として、素人が書くよりよほどしっかりした書き方になっています。

ターゲットの座標(x, y)も(10, 5)と仮に置いてくれています。

 

さて、実際に動くかやってみますか。

import math

から最後の

print

までをコピーして「acceleration.py」として保存します。

今回は Windows の C ドライブの下に Blog というフォルダーを作ってそこに保存します。

「スタートメニュー」⇒「Python」⇒「IDLE」で Python のシェルを起動します。

「File」⇒「Open」で「acceleration.py」を開きます。

 

IDLE で開いたところ

さて、いよいよ実行です。緊張の一瞬。

「Run」⇒「Run Module」を選択します。

その結果、、、

最初の結果は、おっと、指示を間違えたか。(でも、エラーは出てない)

加速度が「0.5m」になってた!

 

で、

「Generate Python code to move from (0, 0) to (x km, y km) by acceleration 0.5 km from zero speed」

に直して再生してみました。まあ、手で直してもいいんですけど。

 

<div style="padding: 10px; margin-bottom: 10px; border: 1px solid #333333;">

 

Here's an example Python code that simulates the movement of an object from (0,0) to (x km, y km) with an acceleration of 0.5 km/s^2 from zero speed:

 

import math

# Set the target coordinates (in kilometers)
x_target = 10
y_target = 5

# Convert the acceleration from km/s^2 to m/s^2
a = 0.5 * 1000

# Set the initial conditions
x = 0
y = 0
vx = 0
vy = 0
dt = 0.01  # time step (in seconds)

# Loop until the target is reached
while x < x_target or y < y_target:
    # Calculate the new velocity
    vx += a * dt
    vy += a * dt

    # Calculate the new position
    x += vx * dt
    y += vy * dt

    # Print the current position
    print("x: {:.2f} km, y: {:.2f} km".format(x, y))

# Print the final time
time = math.sqrt*2

 

This code is similar to the previous example, but the acceleration is converted from km/s^2 to m/s^2 before being used in the calculation. The results are also printed with a higher precision to show the decimal places.

Note that again, this is a simplified model and does not take into account factors such as air resistance or friction.

</div>

 

ここで驚いたのは、以前に実行したものを覚えてるんですよね。

「This code is similar to the previous example, but the acceleration is converted from km/s^2 to m/s^2 before being used in the calculation. 」

前のものと似ているけど、加速度の単位が m/毎秒毎秒 を km/毎秒毎秒 に変更されたよ、と。

うーむ。過去の実績もノウハウとして蓄積されるということか。

 

で、さっきと同じように IDLE で実行してみると、

正しい実行結果

きっちりなってます。

これからいろいろ試して、可能性を探ろうと思います。

プログラマが要らなくなる世界(いや、「誰でもプログラマの世界」)ももうすぐ。

 

ではでは。

 

 

 

*1:2 * x_target / ax)**2 + (2 * y_target / ay)**2)
print("Time taken: {:.2f} seconds".format(time

*2:2 * x_target / a)**2 + (2 * y_target / a)**2)
print("Time taken: {:.2f} seconds".format(time