Xkcdスタイルの自動化されたチャート:真面目から楽しみまで







Vitaly Kaurovの記事「 Automating xkcd Diagrams:Transforming Serious to Funny 」の翻訳。

記事のテキスト、インタラクティブモデル、および記事提供されるすべてのコードを含むファイルは、こちらからダウンロードできます。

翻訳に協力してくれたキリル・グゼンコに深く感謝します。
月曜日の朝、私はMathematica Stack Exchangeで公開されている興味深い質問に出くわしました 。「 xkcdスタイルでグラフを作成する 」という簡単な見出しです。 Randall Munroeによるxkcdウェブコミックの 人気により、このページにいくつかのブックマークを追加し、1ダースの投票を追加することを期待していました。 それから私はすべてがどうなるかわからなかった。 ミームのバイラリティを予測することは困難ですが、ミームを作成できた場合、その人気がどのように成長し、インターネット上で広がるのかを見るのは非常にクールです。 2日後、この投稿には既に10万件以上のビュー、200件の投票、150件のブックマークがありました。 Stack Exchangeの他のセクションに回答や同様の投稿が表示されるようになりました。これについての小さなハリケーンがTwitterで発生し、 Hacker Newsredditで議論が登場しました。 ここで、xkcdスタイルの画像の例を元のAmatyaの投稿に示します。



「xkcdスタイルのスケジュールで返信したいメールを受け取りましたが、処理できませんでした。 私が描いたものはすべて正しく見えましたが、Plot Legendsにテキストの断片を浮かせるようなコマンドを思い付くことができませんでした。 xkcdスタイルでグラフィックスを作成する方法はありますか? すべてが手描きで不正確に見えるとき。 「 Mathematicaでこのような奇妙な曲線を描くのは実装が難しいと思います。」



夜に玄関に戻る








しかし、 Mathematicaでそのような曲線を描くの楽しいの同じくらい簡単であることがわかります。 Mathematica Stack Exchangeは、ユーザー自身の努力によってのみ開発された質問と回答の形式で組織された急成長中のコミュニティです。 彼がこの興味をそそる質問で非常に注目を集め、非常に多くの美しく思慮深い答えを受け取ったことを見てうれしかったです。 元の投稿にアクセスして、すべての回答を確認することをお勧めします。 ここでは、サイモン・ウッズが作成した解決策の1つだけを紹介します。これは、多かれ少なかれ普遍的であり、 Mathematicaのすべてのタイプのグラフ、さらには画像に適用されます。



Simonは、xkcd()コミックにあるフォントを定義することから始めました。







次のステップは、出力フォントを様式化されたxkcdに変換する関数をセットアップすることでした。 グラフ上の特定のポイントとテキストのオフセットについて、スプラインを使用して、マークされたポイントは滑らかな曲線で接続されます。







ここで、いくつかのグラフィックオブジェクトについて、テキストスタイルを定義済みのxkcdスタイルに置き換え、ラインスタイルを変更するルールを設定します。 コード行の6行目が太字の黒に置き換えられていることに注意してください。太字の黒は、元の行よりもやや幅の広い白い行の上に描画されます。 これは、別の曲線と交差するときに1つの曲線に顕著なギャップを設定するために必要です-手描きの似顔絵図の特徴です。







次の関数は、上記の規則を適用し、軸を太くします。











最後に、画像処理を担当する部分が来ました-私の意見では、サイモンのソリューションの中で最も革新的で興味深い部分です。 その理由は、 Mathematicaグラフィックスだけでなく、任意の画像でコードの残りの部分とは独立して機能するためです。 後で見るように、これにより、xkcdスタイルを任意のチャートに適用する機会が与えられます。 以下の関数の目的は、画像の線をわずかに歪ませて、手書きの結果生じる不均一性をシミュレートすることです。







最初に、関数はMathematicaグラフィックスをラスタライズし、それを画像に変換します。 次に、彼女は2つのランダムな画像を作成し、ガウスコアでの畳み込みによってそれらを滑らかにします。 ランダムに、ただしこれらの画像の各ピクセルの値を滑らかに変化させることが、元の画像のピクセルの変位を決定するための基礎となります。 ピクセルオフセットは、 ImageTransformation関数によって設定されます。 最新の機能は、xkcdスタイルを適用し、画像を歪めます。







いくつかのグラフで試してみましょう。 これがサイモンが引用した最初の例で、これがどのように連携するかを示しています。











Mathematicaの最も多様なグラフィックス機能からxkcdConvertを使用して取得した2Dおよび3Dグラフィックスの他の例をいくつか示します。 xkcdConvertは、関数の名前とグラフィック関数の結果の両方に適用できることに注意してください 。 つまり、最初にいくつかの3Dグラフィックスを作成し、それを回転させ、ズームインし、パンし、次に何が起こったかに応じてxkcdConvertを適用できます。











Jon McLooneが数年前にxkcdスタイルの画像作成の自動化についての自己説明投稿で書いたことは注目に値します。 そこで彼は、xkcdスタイルで図を作成し、さまざまな色を追加する方法を示しました。 これで、手動のスペルによる「曲がり具合」を追加できます。











私はすべてがかなり本物に見えると思います。 すばらしい仕事、サイモン! 元の投稿で提供されているコード例やその他のソリューションを確認することを強くお勧めします。 xkcdConvert関数を画像に直接適用する方法に注意してください。 ただし、フォントもラスター形式であるため、フォントを「面白い」フォントに置き換えることはできません。 それでも、効果は非常に現実的です。



Yu-Sung Changは、参照によってイメージを取得し、それをxkcdとして様式化するCDFアプリケーションを作成するという素晴らしいアイデアを持っていました。 以下では、サイモンのものとは少し異なるアイデアを使用します。 このケースでは、ランダム化された関数BSplineFunctionは、ピクセルImageTransformationの変位のガイドラインとして機能します。 また、振幅と周波数を調整する機能も追加されます。 チャート画像へのリンクを貼り付けて、Enterキーを押してください。 必要に応じて、色を反転したり、結果をクリップボードにコピーしてコンピューターに画像を保存したりできます。





(CDF-manipulatorをダウンロード



問題が発生します-さまざまな分野の専門家や科学研究の研究者が使用する製品は、芸術分野の仕事、創造的な方向性、革新的なアプローチなど、そのような異常な問題をどのように効果的に解決できますか? 答えは統合です。 Mathematicaは「箱から出して」すぐに利用できる幅広い技術とアルゴリズムを提供します。 これらは非常に注意深く一貫して開発されているため、ユーザーはLEGOコンストラクターの詳細からプログラムを組み立てることができます。 グラフィック、ルールとパターン、画像処理、インポートとエクスポート、ネットワーク操作、ダイナミクスとインタラクティブ機能、インターフェイスの作成、CDFの展開と使用など、どの分野に触れたか見てみましょう。 ですから、読者が次回Mathematicaで作業するとき、方程式を解いてグラフを作成するときに、即興のほぼ無限の可能性が日常の仕事から遠く離れることを覚えていることを願っています。



ご注意



Wolfram | Alphaがxkcdスタイルで結果を生成できることを知っている人はほとんどいません。 これを行うには、リクエストの最初に「 手書き 」という単語を指定するだけです



いくつかの例:



リクエスト「 手書きhabrahabr











リクエスト「 手書きルンゲクッタ法、dy / dx = -2xy、y(0)= 2、1〜3、h = .25











リクエスト「 手書きの放射性元素










All Articles