2017-05-26

【備忘録】JavaFXで8種より多いシンボルを LineChart に表示する

R を使ってある事象をチャートで説明したところ、なんと(社内の)担当者が R のスクリプトを理解できないということが判明し、仕方なく JavaFX で同じようなプロットを作ることになりました。R ではスマートに計算できるベクトルの計算が、Java ではうまく行かず冗長になりますが、それでもやってやれないことはないと取り掛かったのですが、思わぬところで行き詰まってしまいました。この作業では珍しくシンボルの数が多いのですが、今までのやり方では8種までしかシンボルの色などを設定できなかったのです。

下記は無事この問題が解決した後のプロット例です。

従来は下記のように CSS ファイルで、.default-color0.chart-... の太字の数字の部分を順番に 0, 1, 2, ... と増やして対応させていましたが、この方法だと 7 までしか使えません。

.default-color0.chart-series-line { ... }
.default-color0.chart-line-symbol { ... }
...
...
...

参考サイト [1] によると、.default-color0.chart-... を使わずに、代わりに .series0.chart-... を使うと良いとのことです。下記のようにして 14 種類の線およびシンボルを無事表示されることができました。

リスト:シンボルが多いときの CSS 設定例 
.chart-series-line {
    -fx-stroke-width: 1px;
    -fx-effect: null;
}

.series0.chart-series-line { -fx-stroke: transparent; }
.series0.chart-line-symbol {
    -fx-background-color: #c0c0c0, #c0c0c0;
    -fx-background-radius: 3px;
    -fx-padding: 3px;
}

.series1.chart-legend-item-symbol {
    -fx-background-color: #ff0000;
    -fx-background-radius: 0;
    -fx-background-insets: 0;
    -fx-shape: "M0,5 L0,7 L12,7 L12,5 Z";
    -fx-scale-shape: false;
}

.series2.chart-series-line {
    -fx-stroke: #ff0000;
    -fx-stroke-width: 1px;
}
.series2.chart-line-symbol {
    -fx-background-color: #ff0000, #ff0000;
    -fx-background-radius: 0px;
    -fx-padding: 0px;
}
.series2.chart-legend-item-symbol {
    -fx-background-color: #ff0000;
    -fx-background-radius: 0;
    -fx-background-insets: 0;
    -fx-shape: "M0,5 L0,7 L12,7 L12,5 Z";
    -fx-scale-shape: false;
}

.series3.chart-series-line { -fx-stroke: transparent; }
.series3.chart-line-symbol {
    -fx-background-color: #008080, #008080;
    -fx-background-radius: 2px;
    -fx-padding: 2px;
}
.series4.chart-series-line { -fx-stroke: transparent; }
.series4.chart-line-symbol {
    -fx-background-color: #008080, #008080;
    -fx-background-radius: 0;
    -fx-background-insets: 0;
    -fx-shape: "M2,0 L5,4 L8,0 L10,0 L10,2 L6,5 L10,8 L10,10 L8,10 L5,6 L2,
        10 L0,10 L0,8 L4,5 L0,2 L0,0 Z";
}

.series5.chart-series-line { -fx-stroke: transparent; }
.series5.chart-line-symbol {
    -fx-background-color: #0040c0, #0040c0;
    -fx-background-radius: 2px;
    -fx-padding: 2px;
}
.series6.chart-series-line { -fx-stroke: transparent; }
.series6.chart-line-symbol {
    -fx-background-color: #0040c0, #0040c0;
    -fx-background-radius: 0;
    -fx-background-insets: 0;
    -fx-shape: "M2,0 L5,4 L8,0 L10,0 L10,2 L6,5 L10,8 L10,10 L8,10 L5,6 L2,
        10 L0,10 L0,8 L4,5 L0,2 L0,0 Z";
}

.series7.chart-series-line { -fx-stroke: transparent; }
.series7.chart-line-symbol {
    -fx-background-color: #0000ff, #0000ff;
    -fx-background-radius: 2px;
    -fx-padding: 2px;
}
.series8.chart-series-line { -fx-stroke: transparent; }
.series8.chart-line-symbol {
    -fx-background-color: #0000ff, #0000ff;
    -fx-background-radius: 0;
    -fx-background-insets: 0;
    -fx-shape: "M2,0 L5,4 L8,0 L10,0 L10,2 L6,5 L10,8 L10,10 L8,10 L5,6 L2,
        10 L0,10 L0,8 L4,5 L0,2 L0,0 Z";
}

.series9.chart-series-line { -fx-stroke: transparent; }
.series9.chart-line-symbol {
    -fx-background-color: #4000c0, #4000c0;
    -fx-background-radius: 2px;
    -fx-padding: 2px;
}
.series10.chart-series-line { -fx-stroke: transparent; }
.series10.chart-line-symbol {
    -fx-background-color: #4000c0, #4000c0;
    -fx-background-radius: 0;
    -fx-background-insets: 0;
    -fx-shape: "M2,0 L5,4 L8,0 L10,0 L10,2 L6,5 L10,8 L10,10 L8,10 L5,6 L2,
        10 L0,10 L0,8 L4,5 L0,2 L0,0 Z";
}

.series11.chart-series-line { -fx-stroke: transparent; }
.series11.chart-line-symbol {
    -fx-background-color: #800080, #800080;
    -fx-background-radius: 2px;
    -fx-padding: 2px;
}
.series12.chart-series-line { -fx-stroke: transparent; }
.series12.chart-line-symbol {
    -fx-background-color: #800080, #800080;
    -fx-background-radius: 0;
    -fx-background-insets: 0;
    -fx-shape: "M2,0 L5,4 L8,0 L10,0 L10,2 L6,5 L10,8 L10,10 L8,10 L5,6 L2,
        10 L0,10 L0,8 L4,5 L0,2 L0,0 Z";
}

.series13.chart-series-line { -fx-stroke: transparent; }
.series13.chart-line-symbol {
    -fx-background-color: #ff0000, #ff0000;
    -fx-background-radius: 4px;
    -fx-padding: 4px;
}

JavaFX に書き直したからと言って、くだんの担当者に理解してもらえるかどうかはあやしいのですが、このことで出来なかったことが出来るようになったので良しとし、備忘録としました。

参考サイト

  1. java - setting more than eight colors for data series in JavaFX ScatterChart - Stack Overflow
  2. bitWalk's: JavaFX: LineChart を使いこなそう (3)

 

ブログランキング・にほんブログ村へ
にほんブログ村

2017-05-06

Fedora 26 アルファ版へアップグレード

Linux ディストリビューションのひとつ、Fedora は、年に二回の頻度で新しいバージョンがリリースされています。スケジュール通りにリリースされれば、5 月の連休中にベータバージョンをインストールできるのですが、リリーススケジュールは遅延するのが常です。次期バージョンの Fedora 26 のベータリリースは、現時点では 2017-05-30 となっています [1]

この連休中にアップグレードを済ませておきたかったので、以下の手順で Fedora 25 からアルファ版の Fedora 26 へアップグレードしました。

  1. dnf update --refresh
  2. dnf install dnf-plugin-system-upgrade
  3. dnf system-upgrade download --releasever=26
  4. dnf system-upgrade reboot

以下が実際の例です。

$ su
パスワード:
# dnf update --refresh
Dropbox Repository                              8.2 kB/s | 2.4 kB     00:00    
google-chrome                                    38 kB/s | 3.8 kB     00:00    
Visual Studio Code                              388 kB/s | 238 kB     00:00    
依存性が解決されました。
================================================================================
 Package      アーキテクチャ バージョン                      リポジトリ    容量
================================================================================
アップグレード:
 code         x86_64         1.12.1-1493934217.el7           code          59 M

トランザクションの要約
================================================================================
アップグレード  1 パッケージ

総ダウンロード容量: 59 M
これでいいですか? [y/N]: y
パッケージをダウンロードしています:
code-1.12.1-1493934217.el7.x86_64.rpm           6.6 MB/s |  59 MB     00:08    
--------------------------------------------------------------------------------
合計                                            6.5 MB/s |  59 MB     00:09     
トランザクションの確認を実行中...
トランザクションの確認に成功しました。
トランザクションのテストを実行中...
トランザクションのテストに成功しました。
トランザクションを実行中...
  アップグレード: code-1.12.1-1493934217.el7.x86_64                         1/2 
  整理中        : code-1.11.2-1492070635.el7.x86_64                         2/2 
  検証中        : code-1.12.1-1493934217.el7.x86_64                         1/2 
  検証中        : code-1.11.2-1492070635.el7.x86_64                         2/2 

アップグレード済み:
  code.x86_64 1.12.1-1493934217.el7                                             

完了しました!
# dnf install dnf-plugin-system-upgrade
メタデータの期限切れの確認は、0:01:57 時間前の Sat May  6 11:32:25 2017 に実施しました。
依存性が解決されました。
================================================================================
 Package                             アーキテクチャ
                                              バージョン        リポジトリ
                                                                           容量
================================================================================
インストール:
 dnf-plugin-system-upgrade           noarch   0.7.1-4.fc25      updates    48 k
 python3-dnf-plugin-system-upgrade   noarch   0.7.1-4.fc25      updates    31 k

トランザクションの要約
================================================================================
インストール  2 パッケージ

総ダウンロード容量: 79 k
インストールされる容量: 173 k
これでいいですか? [y/N]: y
パッケージをダウンロードしています:
(1/2): python3-dnf-plugin-system-upgrade-0.7.1- 120 kB/s |  31 kB     00:00    
(2/2): dnf-plugin-system-upgrade-0.7.1-4.fc25.n 178 kB/s |  48 kB     00:00    
--------------------------------------------------------------------------------
合計                                             12 kB/s |  79 kB     00:06     
トランザクションの確認を実行中...
トランザクションの確認に成功しました。
トランザクションのテストを実行中...
トランザクションのテストに成功しました。
トランザクションを実行中...
  インストール  : python3-dnf-plugin-system-upgrade-0.7.1-4.fc25.noarch     1/2 
  インストール  : dnf-plugin-system-upgrade-0.7.1-4.fc25.noarch             2/2 
  検証中        : dnf-plugin-system-upgrade-0.7.1-4.fc25.noarch             1/2 
  検証中        : python3-dnf-plugin-system-upgrade-0.7.1-4.fc25.noarch     2/2 

インストール済み:
  dnf-plugin-system-upgrade.noarch 0.7.1-4.fc25                                 
  python3-dnf-plugin-system-upgrade.noarch 0.7.1-4.fc25                         

完了しました!
# dnf system-upgrade download --releasever=26
Fedora 26 - x86_64 - Updates                    1.9 kB/s | 257  B     00:00    
RPM Fusion for Fedora 26 - Nonfree              122 kB/s | 158 kB     00:01    
RPM Fusion for Fedora 26 - Free                 688 kB/s | 529 kB     00:00    
Fedora 26 - x86_64                              6.4 MB/s |  53 MB     00:08    
Failed to synchronize cache for repo 'rpmfusion-free-updates', 無効化。
Failed to synchronize cache for repo 'Dropbox', 無効化。
Failed to synchronize cache for repo 'rpmfusion-nonfree-updates', 無効化。
メタデータの期限切れの確認は、0:01:13 時間前の Sat May  6 11:35:52 2017 に実施しました。
依存性が解決されました。
================================================================================
 Package                         アーキテクチャ
                                        バージョン                 リポジトリ
                                                                           容量
================================================================================
インストール:
 beignet                         x86_64 1.3.1-1.fc26               fedora 4.6 M
 blivet-gui                      noarch 2.1.3-1.fc26               fedora 300 k
 clang-libs                      x86_64 3.9.1-2.fc26               fedora 8.7 M
 cldr-emoji-annotation           noarch 31.0.0_1-1.fc26            fedora 2.0 M
 compat-openssl10                x86_64 1:1.0.2j-6.fc26            fedora 1.1 M
...
...
...
  zlib.x86_64 1.2.11-2.fc26                                                     
  zlib-devel.x86_64 1.2.11-2.fc26                                               
  zziplib.x86_64 0.13.62-8.fc26                                                 

ダウングレード済み:
  blender.x86_64 1:2.78c-1.fc26                                                 
  blender-fonts.noarch 1:2.78c-1.fc26                                           
  inkscape.x86_64 0.92.0-11.fc26                                                
...
...
...

完了しました!
Download complete! Use 'dnf system-upgrade reboot' to start the upgrade.
ダウンロードされたパッケージは、次の成功するトランザクションまで、キャッシュに保存されます。
'dnf clean packages' を実行することでキャッシュを削除できます。
# dnf system-upgrade reboot

最後のリブート処理で、パッケージのアップグレードと整理が始まります。時間はかかりましたが、アップグレードを無事終了することができました。

Fedora 26 の新しい機能などについては別記事でレポートして行く予定です。

参考サイト

  1. Releases/26/Schedule - FedoraProject

 

ブログランキング・にほんブログ村へ
にほんブログ村