matplotlibで階級を指定してヒストグラムを作る

plt.hist のbins に階級を表すリストを指定することで、任意の区切りで階級を設定したヒストグラムを作成できる。 例えば、最小を 40, 最大を 80 として、10区切りにする場合、以下のようにする。

fig, ax2 = plt.subplots()
n, bins, patches = ax2.hist(df, bins=[x for x in range(40, 90, 10)])

bins の出力結果は以下の通り。40 から 80 まで、10区切りになっていることが分かる。

array([40., 50., 60., 70., 80.])

サンプル: 全文

import pandas as pd
import matplotlib.pyplot as plt


# サンプルデータ
data = [64,73,63,68,44,59,61,42,57,70,56,64,53,66,48,48,51,54,54,73,51,44,83,74,47,57,41,45,60,72,77,69,72,62,78,58,64,61,52,61,45,66,58,60,54,71,57,52,54,73]
df = pd.DataFrame(data)

fig, ax2 = plt.subplots()
n, bins, patches = ax2.hist(df, bins=[x for x in range(40, 90, 10)])

flet で 2つの Tab を切り替えて使えるようにする

Tab を使って画面を切り替えられるようにした

import flet as ft

def main(page: ft.Page):
    def button_click(e):
        print("-- button_click")
        message = "data:" + e.control.data + "\n2\n3\n4"
        push_result.value = message
        text1.value = "ここも変えられる = " + message
        page.update()
        print("updated--")

    # 定数設定
    BUTTON_COLOR = ft.colors.TEAL_ACCENT_100
    BGCOLOR = ft.colors.TEAL_500

    # page setting
    page.title = "button example"
    page.window.width = 220
    page.window.height = 520
    page.window.title_bar_hidden = False
    page.window.frameless = False
    page.scroll = ft.ScrollMode.ALWAYS
    page.bgcolor = BGCOLOR

    # ボタンに格納するデータ
    button_data = {
                "minamotono": "yoritomo",
                "minamotono": "yoshitune",
                "坂本      ": "ryoma",
                "西郷      ": "takamori",
                "桂        ": "小五郎",
                "tokugawa": "ieyasu",
                "sugawarano": "michizane",
                "mouri": "motonari",
                "oda": "nobunaga",
               }

    #-----------------------------------------------------------
    # Tab1 用のデータ
    #-----------------------------------------------------------
    # ボタンデータの読み込みとボタン情報の生成
    column_items = []
    for key in button_data:
        column_items.append(
            ft.ElevatedButton(
                key, data=button_data[key],
                height=30,
                width=150,
                style=ft.ButtonStyle(
                    shape=ft.RoundedRectangleBorder(radius=10)
                ),
                bgcolor=BUTTON_COLOR,
                on_click=button_click
            )
        )

    # ボタンを押した結果を表示するための text 領域
    push_result = ft.Text("result",
                          max_lines=30,
                          selectable=True,
                          )
    column_items.append(push_result)

    # ボタンをコンテナに登録
    container = ft.Container(
        content=ft.Column(column_items),
        # bgcolor=BGCOLOR,
        bgcolor=ft.colors.RED_100,
        padding=10,
        adaptive=True
    )

    #-----------------------------------------------------------
    # Tab2 用のデータ
    #-----------------------------------------------------------
    # ボタンをコンテナに登録
    text1 = ft.TextField(
                            "text1",
                            multiline=True,
                            adaptive=True,
                        )
    text2 = ft.Text("text2")
    column_items2 = [text1, text2]
    column2 = ft.Column(column_items2)
    container2 = ft.Container(
        content=column2,
        # bgcolor=BGCOLOR,
        bgcolor=ft.colors.RED_100,
        padding=10,
        adaptive=True
    )

    #-----------------------------------------------------------
    # Tab1 と Tab2 をページに追加
    #-----------------------------------------------------------
    tab = ft.Tabs(
        selected_index=0,
        animation_duration=300,
        tabs=[
            ft.Tab("Tab1", content=container),
            ft.Tab("Tab2", content=container2),
        ]
    )

    page.add(
        tab,
    )


# ft 処理開始
ft.app(target=main)

辞書で定義したデータをもとに flet の ElevatedButton を作成するコード

辞書で定義したデータをもとに、flet の ElevatedButton を作成するコードのサンプル

辞書のキーを ElevatedButton のボタンに表示される文字列にしている。 辞書の値は、ElevatedButton の data として定義しておき、event 用の関数で e.control.data と形で受け取っている。

import flet as ft

def main(page: ft.Page):
    def button_click(e):
        column.controls.clear()
        column.controls.append(ft.Text("data:" + e.control.data))
        page.update()

    # 定数設定
    BUTTON_COLOR = ft.colors.TEAL_ACCENT_100
    BGCOLOR = ft.colors.TEAL_500

    # page setting
    page.title = "button example"
    page.window.width = 220
    page.window.height = 220
    page.window.title_bar_hidden = False
    page.window.frameless = False
    page.scroll = ft.ScrollMode.ALWAYS
    page.bgcolor = BGCOLOR

    # ボタンに格納するデータ
    button_data = {
                "minamotono": "yoritomo",
                "minamotono": "yoshitune",
                "坂本      ": "ryoma",
                "西郷      ": "takamori",
                "桂        ": "小五郎",
                "tokugawa": "ieyasu",
                "sugawarano": "michizane",
                "mouri": "motonari",
                "oda": "nobunaga",
               }

    # ボタンデータの読み込みとボタン情報の生成
    column_items = []
    for key in button_data:
        column_items.append(
            ft.Row([
                ft.ElevatedButton(
                    key, data=button_data[key],
                    height=30,
                    width=150,
                    style=ft.ButtonStyle(
                        shape=ft.RoundedRectangleBorder(radius=10)
                    ),
                    bgcolor=BUTTON_COLOR,
                    on_click=button_click)
            ])
        )

    # ボタンをコンテナに登録
    container = ft.Container(
        content=ft.Column(column_items),
        bgcolor=BGCOLOR,
        padding=10,
        adaptive=True
    )

    # これはなくてもよい。ボタンを押した時の検証用に作成
    column = ft.Column()

    # コントロールをページ追加
    page.add(
        ft.Row([container]),
        ft.Row([column])
    )


# ft 処理開始
ft.app(target=main)

辞書で準備した情報をもとに flet でボタンを作る (隣に Textを配置)

辞書で準備したデータを読み込んでボタンを作るサンプル ElevatedButton の文字を大きくしたい場合、ElevatedButton の字は大きくできないようなので、ボタンの横に Text を配置し、 Text の文字を大きくして表示した。

import flet as ft

def main(page: ft.Page):
    def button_click(e):
        column.controls.clear()
        column.controls.append(ft.Text("data:" + e.control.data))
        page.update()

    # 定数設定
    BUTTON_COLOR = ft.colors.TEAL_ACCENT_100
    BGCOLOR = ft.colors.TEAL_500

    # page setting
    page.title = "button example"
    page.window.width = 350
    page.window.height = 500
    page.window.title_bar_hidden = False
    page.window.frameless = False
    page.scroll = ft.ScrollMode.ALWAYS
    page.bgcolor = BGCOLOR

    # ボタンに格納するデータ
    button_data = {
                "minamotono": "yoritomo",
                "minamotono": "yoshitune",
                "坂本      ": "ryoma",
                "西郷      ": "takamori",
                "桂        ": "小五郎",
                "tokugawa": "ieyasu",
                "sugawarano": "michizane",
                "mouri": "motonari",
                "oda": "nobunaga",
               }

    # ボタンデータの読み込みとボタン情報の生成
    column_items = []
    for key in button_data:
        column_items.append(
            ft.Row([
                #ft.Text はなくてもよい。
                ft.Text(key, size=20, width=150, weight=ft.FontWeight.BOLD, 
                        style=ft.TextStyle(word_spacing=10),
                        text_align=ft.TextAlign.RIGHT,
                        bgcolor=BUTTON_COLOR
                        ), 
                ft.ElevatedButton(
                    key, data=button_data[key],
                    height=30,
                    width=150,
                    style=ft.ButtonStyle(
                        shape=ft.RoundedRectangleBorder(radius=10)
                    ),
                    bgcolor=BUTTON_COLOR,
                    on_click=button_click)
            ])
        )

    # ボタンをコンテナに登録
    container = ft.Container(
        content=ft.Column(column_items),
        bgcolor=BGCOLOR,
        padding=10,
        adaptive=True
    )

    # これはなくてもよい。ボタンを押した時の検証用に作成
    column = ft.Column()

    # コントロールをページ追加
    page.add(
        ft.Row([container]),
        ft.Row([column])
    )


# ft 処理開始
ft.app(target=main)

VBScript で呼び出したプログラムの実行結果(標準出力)を取得する方法

課題

VBScript でプログラムを実行した時に、実行結果としてコマンドプロンプトに表示される文字列を取得したいと考えたことはありませんか ? 

 

WScript.Shell の Run で実行した場合、コマンドの実行結果(標準出力)を取得することはできません。

 

解決方法

WScript.Shell オブジェクトの Exec メソッドを使うと、標準出力を取得することができます。

 

例えば、Exec メソッドを使って、ipconfig を実行し、その実行結果を表示する場合のスクリプトは、以下のようになります。

 

'オブジェクトを生成
Set objWshShell = CreateObject("WScript.Shell")

'コマンドを実行
Set objExec = objWshShell.Exec("ipconfig")

'コマンド実行結果を出力
Do While objExec.StdOut.AtEndOfStream = false
    line = objExec.StdOut.ReadLine
    WScript.Echo line
Loop