Mpld3: λΈŒλΌμš°μ €/HTML은 figsize * dpiκ°€ μ•„λ‹Œ κ·Έλ¦Ό 크기λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.

에 λ§Œλ“  2014λ…„ 02μ›” 06일  Β·  31μ½”λ©˜νŠΈ  Β·  좜처: mpld3/mpld3

νŒ¨ν‚€μ§€λ₯Ό 정말 μ¦κ²ΌμŠ΅λ‹ˆλ‹€. κ³΅μœ ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.

이것은 μ œμ•ˆλœ κ°œμ„  μ‚¬ν•­μ΄μ§€λ§Œ μ™„μ „νžˆ νŒŒμ΄μ¬μ μ΄μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ‹€μ‹œ d3js도 μ•„λ‹™λ‹ˆλ‹€. :)

그림의 μ„€μ • 크기가 화면에 λ°˜μ˜λ˜λŠ” 것은 μ’‹μ§€λ§Œ μΊ”λ²„μŠ€ 크기λ₯Ό 경계 div둜 μ„€μ •ν•˜κ³  ν•΄λ‹Ή div 크기λ₯Ό λΈŒλΌμš°μ € λ„ˆλΉ„/무엇이든 κ²°μ •ν•˜λ„λ‘ ν•˜λŠ” μ˜΅μ…˜μ΄ 있으면 "λ°˜μ‘μ„±"이 더 높을 것이라고 μƒκ°ν•©λ‹ˆλ‹€. 그렇지 μ•ŠμœΌλ©΄ κ°œλ°œμžκ°€ μ›ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ _js.py 및 _object.py에 λŒ€ν•΄ λ…Όμ˜ν•  κ°€μΉ˜κ°€ μžˆμŠ΅λ‹ˆκΉŒ?

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

@cliffckerr λ‚˜λŠ” 이것을 draw_figure 에 ν™•μ‹€νžˆ μΆ”κ°€ν•  수 있고 μ•„λ§ˆλ„ Object λ₯Ό μ·¨ν•˜κ³  ν•΄λ‹Ή 객체에 μ§€μ •λœ λͺ¨λ“  속성을 svg 에 μ„€μ •ν•˜λŠ” 인수둜 전달할 수 μžˆμŠ΅λ‹ˆλ‹€. {viewBox: ..., width: '90vw', height: 'auto'} 와 같은 κ²ƒμž…λ‹ˆλ‹€.

fig_to_html() λ₯Ό μ§€μ›ν•˜κΈ° μœ„ν•΄ 이것이 λ‹€λ₯Έ 곳에 μΆ”κ°€λ˜μ–΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•˜μ‹œλŠ”μ§€ 이 μŠ€λ ˆλ“œμ˜ κ·€ν•˜μ™€ λ‹€λ₯Έ μ‚¬λžŒλ“€μ—κ²Œ 묻고 μ‹Άμ—ˆμŠ΅λ‹ˆλ‹€. κ·Έλ ‡λ‹€λ©΄ μš°λ¦¬λŠ” 그것에 λŒ€ν•œ 해결책을 생각해야 ν•  κ²ƒμž…λ‹ˆλ‹€. 그렇지 μ•ŠμœΌλ©΄ μ•Œλ €μ£Όμ‹œλ©΄ λ°”λ‘œ draw_figure() 을 λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λͺ¨λ“  31 λŒ“κΈ€

λ‚˜λŠ” 당신이 무엇을 μš”κ΅¬ν•˜λŠ”μ§€ 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€ ... μš°λ¦¬λŠ” matplotlib κ·Έλ¦Όμ—μ„œ κ·Έλ¦Ό 크기λ₯Ό 인치 λ‹¨μœ„λ‘œ μ–»κ³  matplotlib κ·Έλ¦Όμ—μ„œ dpi도 μ–»μŠ΅λ‹ˆλ‹€. μš°λ¦¬κ°€ 이것을 μ–΄λ–»κ²Œ λ°”κΏ€ 것을 μ œμ•ˆν•©λ‹ˆκΉŒ? 감사 ν•΄μš”

Python에 μ„€μ •λœ μ ˆλŒ€ κ·Έλ¦Ό 크기λ₯Ό μ‚¬μš©ν•˜λŠ” λŒ€μ‹  λ‹€μŒκ³Ό 같은 μ˜λ―Έμž…λ‹ˆλ‹€.

<div id='parent' class='figsizeinfo'>
//mpld3 generated code
</div>

μ—¬κΈ°μ„œ figsizeinfoλŠ” CSS 크기 사양이고 mpld3은 divλ₯Ό μ±„μ›λ‹ˆλ‹€. (λ‚΄ κ²½ν—˜μƒ 이것이 flotjsκ°€ μž‘λ™ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€)

흠... 이 μ§ˆλ¬Έμ€ 웹에 λŒ€ν•œ κ²½ν—˜μ΄ μ—†λ‹€λŠ” 것을 λ“œλŸ¬λ‚΄λŠ” 것일 수 μžˆμ§€λ§Œ SVG(mpld3이 μ‚¬μš©ν•˜λŠ”)λŠ” μ™„μ „νžˆ ν”½μ…€ 기반이며 μ‰½κ²Œ λ³€κ²½ν•  수 μ—†λ‹€κ³  μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€. flotjsλŠ” SVG λ˜λŠ” λ‹€λ₯Έ 사양을 μ‚¬μš©ν•©λ‹ˆκΉŒ?

SVG(Scalable Vector Format) κ·Έλž˜ν”½μ€ ν”½μ…€ 기반이 μ•„λ‹ˆλΌ 벑터 κΈ°λ°˜μž…λ‹ˆλ‹€.

λ‹€μŒμ€ μ°½ 크기에 따라 ν™•μž₯λ˜λŠ” 바닐라 matplotlib둜 μƒμ„±λœ SVG μ΄λ―Έμ§€μ˜ μ˜ˆμž…λ‹ˆλ‹€.

http://bleepshow.pithy.io/SVG_Example

(κ·€ν•˜μ˜ 예λ₯Ό λΆ„λͺ…νžˆ 언급함)

d3js와 λͺ¨λ“  μΊ”λ²„μŠ€ 그림은 λ‚΄κ°€ μ΄ν•΄ν•˜λŠ” ν•œ λ²‘ν„°μ΄λ―€λ‘œ 이 μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

λ‚΄κ°€ μƒκ°ν•˜λŠ” 비결은 μ„€μ •ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

figwidth = $(β€œ#parent”).width //(jquery based, but you get the point )

λ³΄λ‹€λŠ”

figwidth = figsize[0] * dpi;

λ„€, SVGκ°€ 벑터 κΈ°λ°˜μ΄λΌλŠ” 것을 μ••λ‹ˆλ‹€. ν•˜μ§€λ§Œ μ œκ°€ μ°©κ°ν•˜μ§€ μ•ŠλŠ” ν•œ μΊ”λ²„μŠ€μ˜ 크기와 마컀의 크기와 ν™”λ©΄μ—μ„œμ˜ μœ„μΉ˜λŠ” 포인트둜 μΈ‘μ •λ©λ‹ˆλ‹€. μž„μ˜μ˜ μ°½ 크기λ₯Ό 가진 μž„μ˜μ˜ 그림에 λŒ€ν•΄ μ˜¬λ°”λ₯΄κ²Œ ν™•μž₯λ˜λŠ” SVG μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” 것은 맀우 λ³΅μž‘ν•  것 κ°™μŠ΅λ‹ˆλ‹€.

μ•„λ‹ˆ, κ½€ μ‰½μŠ΅λ‹ˆλ‹€.

λ‹€μŒμ€ fig_to_d3 μ½”λ“œμ— μ μš©ν•œ ν•΄ν‚Ήμž…λ‹ˆλ‹€.

print mpld3.fig_to_d3(fig).replace("\n","\r").replace("var figwidth = 8.0 * 80","var figwidth = $(window).width()*.9;").replace("var figheight = 6.0 * 80","var figheight = $(window).height()*.9;")

λ‹€μŒκ³Ό 같이 λ‚˜νƒ€λ‚©λ‹ˆλ‹€.

http://bleepshow.pithy.io/mpld3_window_scale_test

이제 λ ˆμ΄λΈ”μ΄ 잘λͺ»λœ μœ„μΉ˜μ— μžˆμ§€λ§Œ λ‹€μ‹œ "κ·Έλƒ₯" 그림에 λŒ€ν•œ μœ„μΉ˜κ°€ μ•„λ‹ˆλΌ div에 λŒ€ν•œ 참쑰의 λ¬Έμ œμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 그림의 λ Œλ”λ§μ€ λ‚΄κ°€ 말할 수 μžˆλŠ” ν•œ 잘 μž‘λ™ν•©λ‹ˆλ‹€.

(μƒˆλ‘œ 고침을 ν•˜μ§€ μ•ŠμœΌλ©΄ 크기가 μ‘°μ •λ˜μ§€ μ•Šμ§€λ§Œ μ•½κ°„μ˜ μ ‘μ°©μ œλ₯Ό μ‚¬μš©ν•˜λ©΄ κ°„λ‹¨ν•©λ‹ˆλ‹€.)

μ €λŠ” ν˜„μž¬ 이 μ†”λ£¨μ…˜μ„ 기반으둜 제리 리깅을 ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. λŒμ–΄μ˜€κΈ° μš”μ²­μ— μ ν•©ν•œ κ²ƒμœΌλ‘œ κ°œμ„ ν•˜λ €κ³  λ…Έλ ₯ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

mpld3 그림의 응닡 ν¬κΈ°λŠ” 정말 μœ μš©ν•  κ²ƒμž…λ‹ˆλ‹€. ν˜„μž¬ Figureλ₯Ό μƒˆ 창으둜 μ—΄ 수 μžˆλ„λ‘ λ²„νŠΌ(도ꡬ λͺ¨μŒμ—μ„œ)으둜 이것을 μΆ”κ°€ν•˜λ©΄ 전체 Figure의 크기λ₯Ό μ‰½κ²Œ μ‘°μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

+1

@hadim "파이썬"으둜 μœ μ§€ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

mpld3.fig_to_d3(fig,size="adaptive")

쒋은 λ°©μ•„μ‡ κ°€ 될 κ²ƒμž…λ‹ˆλ‹€

λ‚˜λŠ” λ™μ˜ν•œλ‹€ !

그림을 λ‹€λ₯Έ 크기둜 λ§Œλ“œλŠ” 것이 μ‰½λ‹€λŠ” 것을 μ΄ν•΄ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ „λ°˜μ μœΌλ‘œ λ‚˜λŠ” μ—¬μ „νžˆ 그것이 쒋은 생각인지 ν™•μ‹ ν•˜μ§€ λͺ»ν•©λ‹ˆλ‹€. κ·Έλ¦Ό 크기가 μˆ˜μ •λ˜λ©΄ λͺ¨λ“  μ„  λ„ˆλΉ„, 마컀 μœ„μΉ˜, 마컀 크기, κΈ€κΌ΄ 크기 등을 ν•΄ν‚Ήν•΄μ•Ό ν•˜λ―€λ‘œ λ§Žμ€ 이점 없이 μ½”λ“œμ— λ§Žμ€ λ³΅μž‘μ„±μ΄ μΆ”κ°€λ©λ‹ˆλ‹€. λ˜ν•œ λ²”λ‘€, μΆ• λ ˆμ΄λΈ” 및 기타 μ†μ„±μ˜ μ˜¬λ°”λ₯Έ λ°°μΉ˜λŠ” plt.draw() λͺ…령에 따라 λ‹¬λΌμ§‘λ‹ˆλ‹€. plt.draw() λͺ…령은 λ‚΄λΆ€ κ·Έλ¦Ό 크기와 dpi 섀정을 기반으둜 κ°€μ •ν•©λ‹ˆλ‹€. - 사싀 이후 μ‘°μ •.

이 mpld3의 철학은 matplotlib μˆ˜μΉ˜μ— μžˆλŠ” λ‚΄μš©μ„ κ°€λŠ₯ν•œ ν•œ κ°€κΉκ²Œ λ°˜μ˜ν•˜λŠ” κ°„λ‹¨ν•œ 좜λ ₯을 μƒμ„±ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 좜λ ₯ Figure의 크기λ₯Ό λ³€κ²½ν•˜λ €λŠ” 경우 μ„ ν˜Έν•˜λŠ” 방법은 matplotlib Figure 크기λ₯Ό μ‘°μ •ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. λ‹€λ₯Έ λͺ¨λ“  것은 κ΅¬ν˜„, ν…ŒμŠ€νŠΈ 및 μœ μ§€ κ΄€λ¦¬ν•˜λŠ” 데 큰 골칫거리가 될 것 κ°™μŠ΅λ‹ˆλ‹€.

ν”ŒλŸ¬κ·ΈμΈμ€ μ–΄λ–»μŠ΅λ‹ˆκΉŒ?

plugins.connect(fig, plugins.ResponsiveSize())

ν”ŒλŸ¬κ·ΈμΈμ΄ μ•„λ§ˆλ„ 쒋은 방법일 κ²ƒμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ‹€μ‹œ κΈ€κΌ΄ 크기, μ„  λ„ˆλΉ„, 마컀 크기, λ²”λ‘€ μœ„μΉ˜ 및 μΆ• ν…μŠ€νŠΈ μœ„μΉ˜λ₯Ό μ‘°μ •ν•˜λŠ” 방법은 λ¬΄μ—‡μž…λ‹ˆκΉŒ? μ΄λŸ¬ν•œ λͺ¨λ“  문제 λ•Œλ¬Έμ— 크기 쑰정을 μ§€μ›ν•˜λŠ” κ΄‘λ²”μœ„ν•œ 인프라가 μ—†μœΌλ©΄ κ·ΈλŸ¬ν•œ ν”ŒλŸ¬κ·ΈμΈμ˜ μœ μš©μ„±μ΄ 맀우 μ œν•œμ μΌ 것이라고 μƒκ°ν•©λ‹ˆλ‹€.

@jakevdp λ™μ˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μœ„μ˜ 3초 ν•΄ν‚Ήμ—μ„œ κ²ͺ은 μœ μΌν•œ λ¬Έμ œλŠ” λ ˆμ΄λΈ” μœ„μΉ˜μ˜€μœΌλ©° λ‹€μ‹œ λ§ν•˜μ§€λ§Œ 더 λ‚˜μ€ μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μž‘μ„±ν•˜λŠ” λ¬Έμ œμž…λ‹ˆλ‹€. DOM은 λ§Žμ€ μž‘μ—… 없이 μ ˆλŒ€ μœ„μΉ˜μ™€ μƒλŒ€ μœ„μΉ˜λ₯Ό ν—ˆμš©ν•©λ‹ˆλ‹€.

μ½”λ“œκ°€ μ§€κΈˆ κ΅¬ν˜„λ˜λŠ” λ°©μ‹μœΌλ‘œ λͺ¨λ“  것이 그림에 ν•˜λ“œ μ½”λ”©λ©λ‹ˆλ‹€. μ•½κ°„μ˜ μž‘μ—…μœΌλ‘œ λ„ˆλΉ„/높이, μ„  λ‘κ»˜ 및 κΈ€κΌ΄ 크기λ₯Ό div 크기에 λŒ€ν•΄ μ„ ν˜•μœΌλ‘œ μ‘°μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ°€μž₯ κΉŒλ‹€λ‘œμš΄ 뢀뢄은 μ’…νš‘λΉ„μ΄λ©° μž κΈ€ 수 μžˆμŠ΅λ‹ˆλ‹€. κ°€λ‘œ μ„Έλ‘œ λΉ„μœ¨μ΄ κ³ μ •λ˜λ©΄ λͺ¨λ“  것을 μ„ ν˜•μœΌλ‘œ ν™•μž₯ν•˜λŠ” 것이 맀우 κ°„λ‹¨ν•©λ‹ˆλ‹€.

@hadim 쒋은 μƒκ°μž…λ‹ˆλ‹€.

λ‚˜λŠ” d3.jsλ₯Ό λͺ°λΌμ„œ 아무 생각이 μ—†μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ μš°λ¦¬λŠ” sv νŒŒμΌμ„ μž‘μ—…ν•˜κ³  있기 λ•Œλ¬Έμ— μ‰½κ²Œ ν•  수 없을 것이라고 μƒκ°ν•©λ‹ˆλ‹€...

그것을 λ§Œλ“œλŠ” κ°€μž₯ 쒋은 방법에 λŒ€ν•΄ μƒκ°ν•˜κΈ° μ‹œμž‘ν•˜λŠ” λͺ‡ 가지 링크:

@dansteingart의 경우 +1μž…λ‹ˆλ‹€. λͺ¨λ“  SVG λ‚΄λΆ€ 길이와 μœ„μΉ˜λ₯Ό μƒλŒ€ μ’Œν‘œλ‘œ μ„€μ •ν•œ λ‹€μŒ 좜λ ₯ 전에 viewBoxλ₯Ό μ‚¬μš©ν•˜μ—¬ 전체 그림의 크기λ₯Ό μ‘°μ •ν•˜κ³  figsize matplotlib λ§€κ°œλ³€μˆ˜μ™€ μΌμΉ˜μ‹œν‚€μ‹­μ‹œμ˜€(λ˜λŠ” λ‹€λ₯Έ κ²½μš°μ—λŠ” 응닡 κ°€λŠ₯).

@dansteingart - μΆ©λΆ„ν•œ JS ν•΅λ§Œ 있으면 μž‘λ™ν•  수 μžˆλ‹€λŠ” 데 λ™μ˜ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ κ·ΈλŸΌμ—λ„ λΆˆκ΅¬ν•˜κ³  μ €λŠ” 이 κΈ°λŠ₯을 ν¬ν•¨ν•˜λ„λ‘ 이 νŒ¨ν‚€μ§€λ₯Ό 근본적으둜 μˆ˜μ •ν•˜λŠ” 것을 μ§€μ§€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ™œμš”? κΈ€μŽ„, ν•œ 쑰각은 그것이 matplotlib μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 ν”Œλ‘― μš”μ†Œ, κ·Έλ¦Ό 크기 등을 μ •μ˜ν•΄μ•Όν•œλ‹€λŠ” νŒ¨ν‚€μ§€ 철학에 μœ„λ°°λœλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

두 λ²ˆμ§ΈλŠ” 이것이 "ν•„μˆ˜" κΈ°λŠ₯이 μ•„λ‹ˆλ©° μ΄λŸ¬ν•œ ν•„μˆ˜κ°€ μ•„λ‹Œ κΈ°λŠ₯에 λŒ€ν•΄ μ½”λ“œ κΈ°λ°˜μ„ 훨씬 더 λ³΅μž‘ν•˜κ²Œ λ§Œλ“œλŠ” 것은 μž₯기적으둜 νŒ¨ν‚€μ§€μ— 손상을 쀄 수 μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. 이것이 κ°€λŠ₯ν•œ μ΄μœ μ— λŒ€ν•œ λ°°κ²½ 지식은 μž‘λ…„ SciPyμ—μ„œ @ellisonbg 의 κ°•μ—° 을 μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

μ΄λŸ¬ν•œ μ’…λ₯˜μ˜ λ™μž‘μ„ μΆ”κ°€ν•˜κΈ° μœ„ν•΄ ν”ŒλŸ¬κ·ΈμΈ μž‘μ—…μ„ ν•˜κ³  μ‹Άλ‹€λ©΄ μ–Έμ œλ“ μ§€ ν™˜μ˜ν•©λ‹ˆλ‹€. 잘 μž‘λ™ν•œλ‹€λ©΄ plugins λͺ¨λ“ˆμ— ν¬ν•¨μ‹œν‚¬ κ°€μΉ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ‚˜λŠ” 그것이 아무리 멋지더라도 νŒ¨ν‚€μ§€μ˜ 철학에 λ°˜ν•˜λŠ” μƒˆλ‘œμš΄ κΈ°λŠ₯에 λŒ€ν•œ κΈ°λ³Έ κ·Έλ¦Ό λ ˆμ΄μ•„μ›ƒμ˜ μ£Όμš” μˆ˜μ •μ— λŒ€ν•΄ λ‹¨ν˜Έν•˜κ²Œ λ°˜λŒ€ν•©λ‹ˆλ‹€.

λ‚˜λŠ” 방금 이것에 μ‚¬λ‘œμž‘ν˜€ μžˆμ—ˆκ³  μΌμ’…μ˜ ν”ŒλŸ¬κ·ΈμΈμ΄ μΌμ’…μ˜ ν₯미둜운 λ°˜μ‘ν˜• κ·Έλ¦Ό 크기 μ‘°μ • λ™μž‘μ„ μˆ˜ν–‰ν•  수 μžˆλŠ” κ²ƒμ²˜λŸΌ λ“€λ¦½λ‹ˆλ‹€. @dansteingart λŠ” κΈ°λŠ₯에 λŒ€ν•œ 아이디어와 νŠΉμ • λ°©μ‹μœΌλ‘œ κΈ°λŠ₯ κ΅¬ν˜„μ„ μ‹œμž‘ν•  κ°€μΉ˜κ°€ μžˆλŠ”μ§€μ— λŒ€ν•œ 질문으둜 이 μŠ€λ ˆλ“œλ₯Ό μ‹œμž‘ν–ˆμŠ΅λ‹ˆλ‹€. μ§ˆλ¬Έμ— λŒ€ν•œ λ‹΅λ³€μœΌλ‘œ ν”ŒλŸ¬κ·ΈμΈμœΌλ‘œ μ‹œμž‘ν•˜μ—¬ _objects.py λ˜λŠ” _js.pyλ₯Ό λ³€κ²½ν•˜μ§€ μ•Šκ³  ν”ŒλŸ¬κ·ΈμΈμ΄ μ–Όλ§ˆλ‚˜ 멀리 갈 수 μžˆλŠ”μ§€ ν™•μΈν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 그럴 μ€€λΉ„κ°€ λ˜μ–΄ μžˆλ‹€λ©΄ ν•œ 걸음 λ¬ΌλŸ¬μ„œμ„œ μš°λ¦¬κ°€ ν•΄κ²°ν•˜λ €κ³  ν•˜λŠ” λ¬Έμ œμ— λŒ€ν•΄ μ΄μ•ΌκΈ°ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

그림의 μ„€μ • 크기가 화면에 λ°˜μ˜λ˜λŠ” 것은 μ’‹μ§€λ§Œ μΊ”λ²„μŠ€ 크기λ₯Ό 경계 div둜 μ„€μ •ν•˜κ³  ν•΄λ‹Ή div 크기λ₯Ό λΈŒλΌμš°μ € λ„ˆλΉ„/무엇이든 κ²°μ •ν•˜λ„λ‘ ν•˜λŠ” μ˜΅μ…˜μ΄ 있으면 "λ°˜μ‘μ„±"이 더 높을 것이라고 μƒκ°ν•©λ‹ˆλ‹€. 그렇지 μ•ŠμœΌλ©΄ κ°œλ°œμžκ°€ μ›ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

이것이 λ‚˜μ˜¬ 유슀 μΌ€μ΄μŠ€μ— λŒ€ν•œ μ„€λͺ…을 μ›ν•©λ‹ˆλ‹€. λ‚΄ 일반 μ›Œν¬ν”Œλ‘œμ—μ„œλŠ” μ›Ή λΈŒλΌμš°μ €κ°€ μ΅œλŒ€ν™”λœ μƒνƒœμ—μ„œ ν΄λΌμš°λ“œμ—μ„œ μ‹€ν–‰λ˜λŠ” λ…ΈνŠΈλΆ μ„œλ²„μ™€ ν•¨κ»˜ ipython을 μ‚¬μš©ν•©λ‹ˆλ‹€. λ”°λΌμ„œ μ—…λ¬΄μš© λ””μŠ€ν”Œλ ˆμ΄μ—μ„œ λž©ν†± λ””μŠ€ν”Œλ ˆμ΄λ‘œ μ „ν™˜ν•˜κ³  ν™”λ©΄ λ„ˆλΉ„κ°€ 더 μž‘μ•„μ§€λ©΄ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ λ‹€λ₯Έ μ‚¬λžŒλ“€μ΄ μƒκ°ν•˜λŠ” λ‹€λ₯Έ 섀정이 μžˆλ‹€κ³  ν™•μ‹ ν•©λ‹ˆλ‹€. λ‹€λ₯Έ 무엇?

@jakevdp μΆ©λΆ„νžˆ κ³΅ν‰ν•˜κ³  파이썬 μΈ‘μ—μ„œ _μ „ν˜€_ λ³€κ²½λœ 것이 μ—†μ–΄μ•Ό ν•œλ‹€λŠ” 데 λ™μ˜ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ JS μͺ½μ—μ„œλŠ” λͺ¨λ‘ κ³΅μ •ν•œ κ²Œμž„μ΄λΌκ³  μƒκ°ν•˜κ³  μ‹€ν—˜μ˜ ν¬μΈνŠΈκ°€ matplotlib와 d3js의 κ°€μž₯ 쒋은 츑면을 κ²°ν•©ν•˜λŠ” 것이라면 계속 좔ꡬ할 κ°€μΉ˜κ°€ μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

λ‚΄κ°€ 보기에 fig_to_d3을 ν˜ΈμΆœν•˜λ©΄ 파이썬 μ˜μ—­μ—μ„œ λ²—μ–΄λ‚˜ 그림을 λ°˜μ‘ν˜•μœΌλ‘œ λ§Œλ“€κ³  = 더 λ‚˜μ€ JSλ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€.

λ°˜μ‘ν˜• νŽ˜μ΄μ§€μ˜ μœ μš©μ„±μ— κ΄€ν•΄μ„œλŠ” iPython 좜λ ₯λ§ŒμœΌλ‘œλ„ λ™μ˜ν•˜μ§€λ§Œ python은 iPython λ…ΈνŠΈλΆ 이상이며 ꢁ극적으둜 mpl3dλ₯Ό μ‚¬μš©ν•˜μ—¬ 크기 λ°˜μ‘ν˜• μ›Ή νŽ˜μ΄μ§€λ₯Ό λ§Œλ“œλŠ” 것이 μ—¬κΈ°μ—μ„œ μ•”μ‹œν•˜λŠ” 것보닀 더 μœ μš©ν•  것이라고 μƒκ°ν•©λ‹ˆλ‹€.

κ·€ν•˜μ˜ 논리에 따라 matplotlib에 따라 μ„ΈλΆ€ 사항을 ν™•λŒ€ν•˜λ €λ©΄ xlim/ylim을 λ³€κ²½ν•΄μ•Ό ν•©λ‹ˆλ‹€.

ν›Œλ₯­ν•œ νŒ¨ν‚€μ§€μ— λ‹€μ‹œ ν•œ 번 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€. ν”ŒλŸ¬κ·ΈμΈμœΌλ‘œ ν•  수 μ—†λŠ” 일을 ν™•μΈν•˜κ³  λ‹€μ‹œ μ—°λ½λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.

@aflaxman

이것이 λ‚˜μ˜¬ 유슀 μΌ€μ΄μŠ€μ— λŒ€ν•œ μ„€λͺ…을 μ›ν•©λ‹ˆλ‹€. λ‚΄ 일반 μ›Œν¬ν”Œλ‘œμ—μ„œλŠ” μ›Ή λΈŒλΌμš°μ €κ°€ μ΅œλŒ€ν™”λœ μƒνƒœμ—μ„œ ν΄λΌμš°λ“œμ—μ„œ μ‹€ν–‰λ˜λŠ” λ…ΈνŠΈλΆ μ„œλ²„μ™€ ν•¨κ»˜ ipython을 μ‚¬μš©ν•©λ‹ˆλ‹€. λ”°λΌμ„œ μ—…λ¬΄μš© λ””μŠ€ν”Œλ ˆμ΄μ—μ„œ λž©ν†± λ””μŠ€ν”Œλ ˆμ΄λ‘œ μ „ν™˜ν•˜κ³  ν™”λ©΄ λ„ˆλΉ„κ°€ 더 μž‘μ•„μ§€λ©΄ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ λ‹€λ₯Έ μ‚¬λžŒλ“€μ΄ μƒκ°ν•˜λŠ” λ‹€λ₯Έ 섀정이 μžˆλ‹€κ³  ν™•μ‹ ν•©λ‹ˆλ‹€. λ‹€λ₯Έ 무엇?

http://pithy.io μ°Έμ‘°

λ‚˜λŠ” λ‚˜/λ‚΄ κ·Έλ£Ή/λ‚΄ μˆ˜μ—…μ΄ 슀크립트λ₯Ό μž‘μ„±ν•œ λ‹€μŒ μ›Ή μ•±μœΌλ‘œ μ „ν™˜ν•  수 μžˆλ„λ‘ κ°„λž΅ν•˜κ²Œ μž‘μ„±ν–ˆμŠ΅λ‹ˆλ‹€. 그림이 창문에 λ”± 맞게 ν•˜λ©΄ 삢이 훨씬 더 λ©‹μ Έμ§‘λ‹ˆλ‹€. MPL3dλŠ” λŒ€ν™”ν˜• ν”Œλ‘―μ„ μˆ˜ν–‰ν•  수 μžˆλŠ” 훨씬 쒋은 도ꡬλ₯Ό μ œκ³΅ν•˜λ©°(λ‚˜λŠ” ν”Œλ‘œνŠΈλ₯Ό ν•΄ν‚Ήν•˜κ³  μžˆμ—ˆμŠ΅λ‹ˆλ‹€) λŒ€ν™”ν˜• ν”Œλ‘―μ΄ 크기에 λ°˜μ‘ν•˜λ©΄ λͺ¨λ‘ μŠΉλ¦¬ν•©λ‹ˆλ‹€.

@dansteingart κ°μ‚¬ν•©λ‹ˆλ‹€. JSκ°€ Python μ‚¬μš©μžμ—κ²Œ 숨겨져 μžˆλ”λΌλ„ μ—¬μ „νžˆ μ½”λ“œμ΄λ©° μœ μ§€ 관리해야 ν•©λ‹ˆλ‹€. μ˜€ν”ˆ μ†ŒμŠ€ κ°œλ°œμ— λŒ€ν•œ μˆ˜λ…„ κ°„μ˜ κ²½ν—˜μ— λ”°λ₯΄λ©΄ μƒˆλ‘œμš΄ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜λŠ” 데 μ—΄κ΄‘ν•˜λŠ” μ‚¬λžŒλ“€μ΄ μ’…μ’… μ°Ύμ•„μ˜€λ©° μ΄λŸ¬ν•œ κΈ°λŠ₯이 λ³‘ν•©λ˜λ©΄ μœ μ§€ 관리 및 μœ μ§€ κ΄€λ¦¬λŠ” νŒ¨ν‚€μ§€μ— νˆ¬μžν•œ μ†Œμˆ˜μ˜ 개발자의 λͺ«μž…λ‹ˆλ‹€. μž₯κΈ°κ°„. λ‚˜λŠ” 이미 λͺ‡ λ…„ 전에 λ§Œλ“  잘 μ‚¬μš©λœ νŒ¨ν‚€μ§€μ— λŒ€ν•œ 버그 λ³΄κ³ μ„œλ₯Ό λ¬΄μ‹œν•  수 밖에 없을 μ •λ„λ‘œ μ§€λ‚˜μΉ˜κ²Œ ν—Œμ‹ μ μž…λ‹ˆλ‹€. λ‚˜λŠ” mpld3κ°€ κ·Έ 지점에 λ„λ‹¬ν•˜λŠ” 것을 μ •λ§λ‘œ μ›ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

이해해 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. ν”ŒλŸ¬κ·ΈμΈμ— 무엇을 μ‘°ν•©ν•  수 μžˆμ„μ§€ κΈ°λŒ€λ©λ‹ˆλ‹€.

@jakevdp κ·Έ 점은 잘 λ°›μ•„λ“€μ—¬μ‘Œκ³ , ν”ŒλŸ¬κ·ΈμΈ μ•„ν‚€ν…μ²˜κ°€ 그런 μ μ—μ„œ 잘 μž‘λ™ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. 깨지면 λ‚΄ 잘λͺ»μ΄ μ•„λ‹ˆλΌ λ‹Ήμ‹ μ˜ 잘λͺ»μ΄ 될 κ²ƒμž…λ‹ˆλ‹€ (즉, fig_to_d3 :-pλ₯Ό λ³€κ²½ν•˜μ§€ μ•ŠλŠ” ν•œ)

μž¬μž‘μ„±μ΄ μ‹œμž‘λ˜μ—ˆμœΌλ©° μ΅œμ†Œν•œ νŠΉλ³„ν•œ μƒν™©μ—μ„œλŠ” ν”ŒλŸ¬κ·ΈμΈμœΌλ‘œ κ΅¬ν˜„ν•˜λŠ” 것이 _μ•½κ°„_ 더 μ‰¬μšΈ 수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이런 역동적인 상황을 염두에 두고 μ“΄ 것이 μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— μ•½κ°„μ˜ 함정이 μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. 이에 λŒ€ν•΄ 진전이 있으면 μ•Œλ €μ£Όμ‹­μ‹œμ˜€.

μ•ˆλ…•ν•˜μ„Έμš”, ν›Œλ₯­ν•œ ν”„λ‘œμ νŠΈμ— κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€. 이 λ¬Έμ œμ— λŒ€ν•œ 진전이 μžˆμ—ˆμŠ΅λ‹ˆκΉŒ? ν”ŒλŸ¬κ·ΈμΈ/κΈ°λŠ₯이 κ°œλ°œλ˜μ—ˆμŠ΅λ‹ˆκΉŒ? 특히 "μΊ”λ²„μŠ€ 크기λ₯Ό 경계 div둜 μ„€μ •ν•˜λŠ” μ˜΅μ…˜"을 μ–ΈκΈ‰ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 감사 ν•΄μš”.

λ‚˜λŠ” 이것이 κ°€μΉ˜ μžˆλŠ” κΈ°λŠ₯이라고 μƒκ°ν•˜μ§€λ§Œ ν”Œλ‘œνŒ… ν›„ μ°Έμ‘°λ₯Ό μœ„ν•΄ d3을 μ‚¬μš©ν•˜μ—¬ 그림을 μžλ™ 크기 μ‘°μ •(μ—¬κΈ°μ„œλŠ” μ°½ 높이 포함)으둜 λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

fetch("d3/" + figure + ".json")
    .then((response) => response.json())
    .then((data) => mpld3.draw_figure(figure, data))
    .then(() => {
        d3.select("#" + figure)
            .selectAll(".mpld3-figure")
            .attr("width", "100%")
            .attr("height", "70vh")
            .attr("viewBox", "0 0 1200 800")
            .attr("preserveAspectRatio", "xMinYMin meet");
    });

μ—¬κΈ°μ„œ viewBox λ₯Ό μ‚¬μš©ν•˜λ„λ‘ @hadim 및 @carlinmack 을 두 번째둜 μ‚¬μš©ν•˜κ² μŠ΅λ‹ˆλ‹€. μ‹€μ œλ‘œ 맀우 간단할 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, ν˜„μž¬ <svg width="1200" height="800"> κ°€ μžˆλŠ” 경우 λŒ€μ‹  <svg viewBox="0 0 1200 800"> λ₯Ό μ‹œλ„ν•˜μ‹­μ‹œμ˜€. 그게 λ‹€μ•Ό viewBox λŠ” svg λ‚΄λΆ€μ˜ μ’Œν‘œκ³„λ₯Ό μ •μ˜ν•˜κ³  width 및 height λ§€κ°œλ³€μˆ˜λŠ” 선택 사항이 λ˜μ–΄ λ‹€λ₯Έ μš”μ†Œμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ μ™ΈλΆ€ 치수λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€. width=100% λ₯Ό μ‚¬μš©ν•˜κ±°λ‚˜ cssλ₯Ό 톡해 직접 값을 μ„€μ •ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€(css의 λ„ˆλΉ„μ™€ λ†’μ΄λŠ” 속성보닀 μš°μ„ ν•¨).

μ΅œμ‹  크둬 λ²„μ „μ—μ„œ μ„±κ³΅μ μœΌλ‘œ μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ λΈŒλΌμš°μ € κ°„ 쒅속성을 쑰사해야 ν•˜μ§€λ§Œ 결둠은 λͺ…ν™•ν•˜λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

μΆ”μ‹ : https://css-tricks.com/scale-svg 에 λ°°κ²½ 기사가 μžˆμ§€λ§Œ μœ„μ—μ„œ μ„€λͺ…ν•œ 방법이 μž‘λ™ν•˜κ³ (μ΅œμ†Œν•œ μ΅œμ‹  λΈŒλΌμš°μ €μ—μ„œλŠ”) κ°œλ…μ μœΌλ‘œ 간단할 λ•Œ ν˜Όλž€μŠ€λŸ½μŠ΅λ‹ˆλ‹€. viewBox = "0 0 ${width} ${height}" λ‚΄λΆ€ μ½”λ“œμ˜ 경우 width=... 및 height=... λ˜λŠ” ν•„μš”ν•œ 경우 크기 쑰정을 μœ„ν•œ css λ§€κ°œλ³€μˆ˜.

λ„€, 그게 λ°”λ‘œ @carlinmack 이 μ œμ•ˆν•œ κ²ƒμž…λ‹ˆλ‹€. μˆœμˆ˜ν•œ HTML/CSS이기 λ•Œλ¬Έμ— "d3을 μ‚¬μš©ν•˜μ—¬ 그림을 μžλ™ 크기 μ‘°μ •"ν•˜λŠ” 것이 ν˜Όλž€μŠ€λŸ¬μ› μ§€λ§Œ, DOM μ‘°μž‘μ€ d3이 ν•˜λŠ” μΌμž…λ‹ˆλ‹€. @carlinmack 이 ν‘œμ‹œν•˜λŠ” "preserveAspectRatio"λŠ” λ‚΄κ°€ λ―ΏλŠ” κΈ°λ³Έκ°’μž…λ‹ˆλ‹€(적어도 css-tricks.com 링크에 μ„€λͺ…λ˜μ–΄ 있음). κ°€λ‘œ μ„Έλ‘œ λΉ„μœ¨μ΄ μ–΄μ¨Œλ“  μœ μ§€λ˜λŠ” 경우 μ™œ height="70vh" λ₯Ό ν‘œμ‹œν•©λ‹ˆκΉŒ? 그것은 맀우 쒁고 ν‚€κ°€ 큰 인물에 λŒ€ν•œ μΌμ’…μ˜ μƒν•œμž…λ‹ˆκΉŒ?

λ§žμŠ΅λ‹ˆλ‹€, μ €λŠ” μ„Έλ‘œ 그림이 λ·°ν¬νŠΈλ³΄λ‹€ 높은 것을 μ›ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. :)

ν•„μš” μ΄μƒμœΌλ‘œ ν”Όκ·œμ–΄λ₯Ό 크게 λ§Œλ“œλŠ” 것 μ™Έμ—λŠ” μ£Όλ³€ λ‚΄μš©κ³Όμ˜ 밀착이 ν•„μš”ν•œ κ²½μš°μ—λŠ” μ ν•©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λŒ€μ‹  max-height λ₯Ό μ‚¬μš©ν•˜λ©΄ νš¨κ³Όμ μž…λ‹ˆλ‹€.

λ‹€μŒμ€ λΈŒλΌμš°μ €μ—μ„œ mpld3 수치λ₯Ό λ‘œλ“œν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.

      let figureID = "id_12345" ; 
      let dataURL = figureID + ".json" ; 

      d3.json(dataURL).then( function(data) {
        mpld3.draw_figure(figureID, data);
        return data;
      }).then( function(data) {
        d3.select("#" + figureID)
          .selectAll(".mpld3-figure")
          .attr("width", null)   // remove "width" and "height" attributes as set by mpld3
          .attr("height", null)  
          .attr("viewBox", `0 0 ${data.width} ${data.height}`)
      });

토둠에 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€ @carlinmack @perrette ! μš°μ—°νžˆλ„ μš°λ¦¬λŠ” 이것을 λ§Œλ‚¬μŠ΅λ‹ˆλ‹€. @dkong-idm의 μ†”λ£¨μ…˜μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

    const resizeChart = (viewBoxSettings) => {
        let svg = document.getElementsByClassName("mpld3-figure");

        if (svg && svg.length > 0) {
            svg[0].setAttribute("viewBox",viewBoxSettings );
            svg[0].setAttribute("width", "90vw");
            svg[0].setAttribute("height", "auto");
        }
    }

@vladh , 이 μžλ™ 크기 μ‘°μ • κΈ°λŠ₯을 mpld3 에 μΆ”κ°€ν•˜λŠ” 데 λ§Žμ€ μž‘μ—…μ΄ ν•„μš”ν•©λ‹ˆκΉŒ? draw_figure 에 λŒ€ν•œ 선택적 인수 λ˜λŠ” 독립 μ‹€ν–‰ν˜• κΈ°λŠ₯으둜?

@cliffckerr λ‚˜λŠ” 이것을 draw_figure 에 ν™•μ‹€νžˆ μΆ”κ°€ν•  수 있고 μ•„λ§ˆλ„ Object λ₯Ό μ·¨ν•˜κ³  ν•΄λ‹Ή 객체에 μ§€μ •λœ λͺ¨λ“  속성을 svg 에 μ„€μ •ν•˜λŠ” 인수둜 전달할 수 μžˆμŠ΅λ‹ˆλ‹€. {viewBox: ..., width: '90vw', height: 'auto'} 와 같은 κ²ƒμž…λ‹ˆλ‹€.

fig_to_html() λ₯Ό μ§€μ›ν•˜κΈ° μœ„ν•΄ 이것이 λ‹€λ₯Έ 곳에 μΆ”κ°€λ˜μ–΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•˜μ‹œλŠ”μ§€ 이 μŠ€λ ˆλ“œμ˜ κ·€ν•˜μ™€ λ‹€λ₯Έ μ‚¬λžŒλ“€μ—κ²Œ 묻고 μ‹Άμ—ˆμŠ΅λ‹ˆλ‹€. κ·Έλ ‡λ‹€λ©΄ μš°λ¦¬λŠ” 그것에 λŒ€ν•œ 해결책을 생각해야 ν•  κ²ƒμž…λ‹ˆλ‹€. 그렇지 μ•ŠμœΌλ©΄ μ•Œλ €μ£Όμ‹œλ©΄ λ°”λ‘œ draw_figure() 을 λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

@vladh 예, fig_to_html() μ—μ„œλ„ 맀우 μœ μš©ν•©λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰