Biểu đồ với số liệu các series có khoảng cách lớn

Liên hệ QC

ptm0412

Bad Excel Member
Thành viên BQT
Administrator
Tham gia
4/11/07
Bài viết
13,777
Được thích
36,276
Donate (Momo)
Donate
Giới tính
Nam
Nghề nghiệp
Consultant
Biểu đồ với số liệu các series có khoảng cách lớn
Vấn đề:
Có nhiều trường hợp ta cần vẽ biểu đồ với nhiều dãy số liệu, mà dữ liệu cần vẽ lại nằm trong các khoảng số cách xa nhau. Nếu chỉ có 2 dãy số liệu, ta có thể dùng trục toạ độ thứ hai, nhưng từ 3 dãy trở lên đòi hỏi phải có 1 kỹ thuật khác.


Dữ liệu:
Giả sử ta có 3 serie dữ liệu A, B, C như bảng dưới và muốn thực hiện trên cùng 1 đồ thị. Lưu ý rằng 3 dãy số liệu có khoảng cách rất xa nhau: Serie A có các số liệu nhỏ hơn 1, Serie B có các số liệu hàng trăm ngàn, trong khi Serie C có số liệu hàng chục triệu.
DifferentScales01.gif

Với cách vẽ thông thường, ta sẽ có đồ thị như hình sau: Serie B nằm gần sát trục Y trong khi serie A hầu như không nhận thấy nếu không có màu và không có tick mark.

DifferentScales02.gif

Nếu dùng trục Y thứ 2 cho serie A thì đường biểu diễn serie A nằm lẫn lộn với serie C khó phân biệt và không đẹp. Hơn nữa người xem phải đi tìm xem đường nào tương ứng với trục Y nào.

DifferentScales03.gif

Ta cũng có thể thiết lập trục Y chia theo logarith như hình sau, nhưng dù 2 serie A và B đã rời xa trục X nhưng lại có 1 khoảng trống lớn giữa serie A và B. Đồng thời do chia theo logarith, 2 serie B và C trở thành gần như đường thẳng.

DifferentScales04.gif

Hoặc ta làm thủ công, vẽ 3 đồ thị cho 3 serie rồi đặt chúng theo thứ tự chồng lên nhau sau khi format Chart Area của chúng là noline, no fill, X axis của 2 serie B và C là No tick mark, No tick mark labels.

DifferentScales005.gif

Nhưng thật là khó để canh cho đúng các kích thước vùng đồ thị (Plot Area) sao cho chúng lắp ráp khớp với nhau: lý do là vì yêu cầu chỉnh kích thước vùng Plot Area chứ không phải kích thước Chart Area.
Hết sức khó khăn khi phải dùng chuột nắm kéo, điều chỉnh kích thước, vị trí cho 3 biểu đồ ăn khớp nhau. Một bài toán nan giải của thử - sai - sửa. Bạn cũng có thể can thiệp bằng VBA với độ chính xác là pixel, cũng không dễ dàng gì (vì như đã nói, điều chỉnh kích thước của Plot Area, nhưng điều chỉnh vị trí lại là ChartObjects). Hơn nữa, một khi dữ liệu thay đổi, bạn sẽ phải điều chỉnh lại từ đầu.Thí dụ dữ liệu serie A tăng quá 10% hoặc dữ liệu serie B vượt quá 1 triệu … hay sếp bạn muốn tăng kích thước toàn bộ lên, quá trình thử - sai - sửa lại tiếp diễn.

Dữ liệu giả lập
Dữ liệu gốc là vùng A1:D7 màu vàng. Dữ liệu giả lập để đưa lên biểu đồ là vùng E1:G7 màu cam. Cách tính cho vùng này sẽ giải thích sau. Tỷ lệ chia cho trục Y (scales) nằm trong vùng A9:G11 màu xanh dương nhạt. Các giá trị Min và Max của dữ liệu nằm trong các ô B9:D10 tính bằng công thức Min và Max. Các giá trị trong vùng E9:G11 do bạn gõ tay vào với 1 sự tính toán tương đối.
Độ cao tương đối của mỗi vùng đồ thị bằng 1 nằm trong vùng E12:G12. Nghĩa là mỗi vùng đồ thị cho mỗi serie có độ cao bằng nhau và bằng 1/3 của toàn vùng Plot Area. Đặt giá trị này vào các ô sẽ giúp bạn có thể thay đổi kích thước từng vùng đồ thị 1 cách nhanh chóng.

Sau khi hoàn tất các ô trên ta bắt đầu tính cho vùng dữ liệu giả lập E2:G7. Công thức E2 là:
=((B2-E$9)/(E$10-E$9)*E$12+SUM($D$12:D$12))/SUM($E$12:$G$12)
Phần
(B2-E$9)/(E$10-E$9)*E$12 của công thức là vị trí tương đối của giá trị B2 trong vùng serie A của mình, còn +SUM($D$12:D$12) là thêm vào 1 giá trị tương ứng với vị trí đáy serie của mình, (với serie A là zero), /SUM($E$12:$G$12) là so sánh với chiều cao của toàn vùng đồ thị. Fill công thức cho hết vùng E2:G7.


DifferentScales06.gif

Biểu đồ sẽ dùng các serie số giả lập dạng XY làm các label trên trục Y giả lập ở cả 2 bên. Các serie số này được tạo như bảng dưới. Thông thường 1 đồ thị sẽ cần không quá 10 con số minh hoạ trên trục Y, và 1 vùng con sẽ không quá 5 hoặc 6. Tuy vậy bạn cũng hãy tạo sẵn 1 con số chừng gấp đôi mức dự trù, nghĩa là 12 dòng kể cả tiêu đề. Nếu cần bạn có thể làm nhiều hơn.
Các cột I, J (X-left và X-right) là các giá trị X để tạo ra các tickmark cho 2 trục Y bên trái và bên phải. X-left là ngày đầu (A2) trừ 0,5 và định dạng số. X-right là ngày cuối (A7) cộng với 0,5 và cũng định dạng sồ. Bạn có thể gõ công thức trực tiếp =A2-0,5, =A7+0,5 hoặc dùng hàm Min() Max() tuỳ bạn.
Số liệu trong các cột K:M tính toán dựa trên vùng E9:G11. Ô K2 có công thức đơn giản là Min của Serie tương ứng (=E$9, fill ngang qua M2).
Công thức K3 tính cho các mức của Label kế tiếp, hoặc cho giá trị #N/A khi đã đạt mức Max (E10). Hãy nhớ lại rằng ta cần #N/A vì giá trị lỗi #N/A sẽ không hiện lên đồ thị dạng Line hay XY Scatter:
K3 =IF(K2+E$11>E$10,NA(),K2+E$11)
Fill ngang qua M3 và Fill xuống M12. Định dạng lại số cho chúng theo cách bạn muốn thấy trên trục đồ thị, kể cả màu chữ vì ta sẽ dùng 1 tiện ích XY Chart Labeller tự động lấy Label theo định dạng.
Giá trị cho các trục Y giả nằm trong các cột N:p, tính toán bằng công thức tương tự như tính cho các cột E:G nhưng không dùng các giá trị Serie A, B, C mà dùng các giá trị Label A, B, C.
Công thức N2 là:
=((K2-E$9)/(E$10-E$9)*E$12+SUM($D$12:D$12))/SUM($E$12:$G$12)
FIll hết cho vùng N2:p12.


DifferentScales07.gif



 
Biểu đồ với số liệu các series có khoảng cách lớn (tiếp theo)

Tiến hành vẽ đồ thị:

Bước đầu tiên là chọn vùng A1:A7 và E1:G7, dùng chart Wizard vẽ 1 biểu đồ Line đơn giản. Vào format Y Axis, trong tab Scales đổi Min là 0, Max là 1, Major Unit là 0,3333333



DifferentScales08.gif

Tiếp theo chọn vùng I1:I12 và N1:N12, copy và PAste special vào đồ thị, chọn Paste as New Series, Values in Columns, Series Names in First Row, và Categories (X Labels) in First Column. Chỉnh lại Chart Area là No Border, Legend cũng vậy.

DifferentScales09.gif

Serie mới không nằm song song trục Y như ta muốn vì Excel cho rằng nó là 1 serie mới dạng Line. vậy phải đổi nó thành dạng Xy Scatter.

DifferentScales10.gif

Serie XY Scatter mới tạo bao giờ cũng tự nhận 2 trục đồ thị mới. Chuyển nó về Primary Axis, sửa lại X Axis trong Format – Scales tham số min như cũ nếu có thay đổi (vì Excel thường tự động thêm 1 ngày vào trước ngày bắt đầu). Trong Source Data, sửa X value thành I2:I12 nếu Excel không hiểu.

DifferentScales11.gif


Thực hiện tương tự với 2 serie B-Axis và C-Axis. Chú ý chỉnh X Value thành lần lượt X-left và X-Right để chúng nằm lệch nhau, 1 cái trái, 1 cái phải.

DifferentScales12.gif


Xoá bỏ cái chú giải (legend). Chọn điểm cuối của serie A, vào Format Point, click chọn Serie Name trong tab Data Labels. Thực hiện tương tự cho các điểm cuối của serie B và Serie C. Dịch chuyển các label này đến chỗ mong muốn. Chọn None cho Y Axis Tick mark Labels.
Thêm các giá trị gán cho các trục Y giả:
Sử dụng Addins XY Chart Labeller, chọn từng serie trục giả, vào Tools – XY Chart Labeller – Add Labels, chọn các vùng giá trị A-Labels, B-Labels, C-Labels, cho các serie tương ứng. Nếu các số hiện ra đè lên trục Y, hãy nới rộng đồ thị hoặc thu nhỏ vùng Plot Area.
Ta thấy các số này tự động có màu do đã format màu trong các ô giá trị.


DifferentScales13.gif

Dấu các serie Axis và sửa các tick mark thành dấu gạch ngang. Hoặc sử dụng X Error Bar với dấu error dương (bên phải) hoặc dấu Error âm (bên trái).

DifferentScales14.gif
 
Biểu đồ với số liệu các series có khoảng cách lớn (tiếp theo)

Biểu đồ với chiều cao các vùng tuỳ ý

Với dạng đồ thị nhiều vùng nhỏ như trên, nếu bạn muốn chiều cao các vùng nhỏ là tuỳ ý, ta không thể dùng grid line làm đường phân cách vùng. Bạn phải tính toán vị trí đường phân cách vùng và cho vào đồ thị 1 serie đồ thị XY khác, nằm trên trục Y, với các điểm đồ thị ứng với các vị trí cần có đường phân cách. Sau đó dùng X Error Bar vẽ đường phân cách.
Dữ liệu được tính và hiển thị trong vùng R1:T3 như bảng dưới. Dòng X-left S1:T1 bằng ngày đầu trừ 0,5, định dạng số. Dữ liệu dòng Y-Divider tính bằng công thức S2 =
=SUM($E$12:E$12)/SUM($E$12:$G$12)
Fill ngang qua T2
Dòng Error bar bằng số khoảng ngày trên trục X và bằng ngày cuối trừ ngày đầu cộng thêm 1.



DifferentScales15.gif


Từ biểu đồ bài trên xoá các grid đi:


DifferentScales16.gif


Copy R1:T2, click chọn biểu đồ, paste special – Paste as New Serie, Serie in Row. Sửa lại X value là $S$1:$T$1, Y value là $S$2:$T$2 nếu Excel không hiểu và đường biểu diễn nằm sai chỗ.


DifferentScales17.gif


Dấu đường biểu diễn mới và thêm Error Bar: VÀo Format Serie, chọn none cho Line và các Marker, None cho Marker Labels. Trong tab X Error Bar, chọn mục Custom (+), và chọn vùng S3:T3. Chọn loại Error Bar là đường kẻ thẳng không có đuôi.


DifferentScales18.gif


Kết quả sẽ cho thấy khi bạn thay đổi tham số tỷ lệ chia vùng ở các ô E12:G12 và thay đổi mức chia nhỏ của Major ở các ô E11:G11. Thí dụ đổi tỷ lệ chia từ 1:1:1 thành 1:1:2 (sửa ô G12 thành 2) và chọn Major cho Seie C (G11) là 1 triệu thay vì 2 triệu, ta sẽ được biều đồ sau, chú ý các vùng tính
toán liên quan Y-Divider (S2:T2) thay đổi và vùng C-Label (M2:M12) thay đổi.



DifferentScales19.gif


Hoặc bạn thay đổi tỷ lệ chia là 2:1:2 và Major cho serie A là 0,5% thay vì 1%


DifferentScales20.gif


Tóm tắt:
Bạn cũng có thể có nhiều hơn 3 vùng nhỏ, là 4 hoặc 5, vấn đề là bạn cho tất cả những gì bạn cần thay đổi trên đồ thị vào 1 vùng dữ liệu nào đó và là công thức tính toán.
 
Biểu đồ với số liệu các series có khoảng cách lớn (tiếp theo)

Thí dụ với 4 vùng đồ thị nhỏ , tỷ lệ chia: 1,5 : 1,5 : 2,5 : 3

DifferentScales21.gif
 
Em thấy đề tài này rất hay.
Nhưng nếu được Bác gởi file ví dụ về biểu đồ với 3 serie có khoảng số cách xa nhau cho mọi người tham khảo được không?
Đọc phần hướng dẫn em chưa hiểu lắm. Hơn nữa máy em sao không nhìn được hình minh họa Bác đưa lên. Nên đành ngậm ngùi... nhìn!
Cảm ơn Bác nhiều nha!
 
File mẫu

Gởi các bạn file minh họa cho bài 1, 2 (Sheet1) và bài 3 (sheet2). Còn sheet3 cho bài 4 bị xoá mất rồi.
To ALoan: Bạn xem file rồi thử phát triển thành 4 series nhé. Máy nào mà không coi được hình nhỉ? Vậy là yên tâm không coi được cả hình kia.
 

File đính kèm

  • Chart with Different Scales.zip
    18.2 KB · Đọc: 635
Trước hết là cảm ơn Ptm0412 đã cho em hiểu thêm về loại biểu đồ này!

Chính vì vậy mà hôm nay em có 1 chút vướng mắc nhỏ, mong được giúp đỡ. Hì

Bên trục Y e muốn số liệu thể hiện là đơn vị ngàn USD thì phải làm thế nào ah!

Thanks!
 

File đính kèm

  • BIEU DO(AL).zip
    12.8 KB · Đọc: 177
Lần chỉnh sửa cuối:
Em xem:
- công thức đã sửa ở các cột O, Q, R, T
- định dạng cột O và Q không còn custom
- Chart option thêm Value (Y) Axis Title là "Thousand $"

Rất vui vì em áp dụng thành công cách vẽ này.

Trước khi sửa:

BeforeChange.gif

Sau khi sửa:


AfterChange.gif
 

File đính kèm

  • BIEU DO(AL)Ptm.zip
    11.8 KB · Đọc: 285
File của ALoan có 1 chỗ sai, vì chỗ sai dó mà khi thay đổi tỷ lệ chia vùng theo ý muốn, trục giả không chạy theo.
Và có 1 chỗ chưa làm tới, mà nếu chia lại tỷ lệ vùng thì đường phân vùng không ở đúng chỗ.
A Loan thử tìm xem.
 
Em sửa lại cho sai rồi!
Anh xem lại dùm em nha!

Thanks!
 

File đính kèm

  • BIEU DO(AL)Ptm.zip
    11.8 KB · Đọc: 269
Tuyệt vời. Chỉ còn giấu kỹ mấy trục giả là xong: Serie A, Serie B, Y-Divider:
- line = none
- marker = none
 
Chào mọi người,
Em mới tham gia diễn đàn,thấy mọi người có nhiều sáng tạo hay quá, em học hỏi được rất nhiều.
Em đã làm thử theo cách ở đây, nhưng em muốn hỏi một chút, nếu dữ liệu ở cột A không phải là ngày tháng mà là tex thì làm thế nào ạ?
Ví dụ như em có thống kê về FDI cột A sẽ là các ngành dịch vụ, 3 cột dữ liệu là số dự án, số vốn mới, và tổng vốn cũ và vốn cấp thêm, thì sẽ phải xử lý như thế nào?
Mong mọi người chỉ giáo thêm
 
Ví dụ như em có thống kê về FDI cột A sẽ là các ngành dịch vụ, 3 cột dữ liệu là số dự án, số vốn mới, và tổng vốn cũ và vốn cấp thêm, thì sẽ phải xử lý như thế nào?
Bạn cứ làm bình thường thôi.
 
theo cách làm như trên thì cột x-left và x-right được tính bằng cách lấy A2 -0.5 và A7+0.5. Nếu giá trị cột A là text thì em không biết đặt giá trị x-left và x-right như thế nào ạ?
 
Bạn cứ làm như là ngày tháng, với ngày bắt đầu tùy ý. Đương nhiên là tính được X-Left và X-Right.
Sau đó làm 1 trục X giả, dạng XY Scatter, X Value bằng cột ngày tháng đó, Y Value = 0 tất cả các point.
Cuối cùng là dùng XY Chart Labeler gán cột "Ngành dịch vụ" làm Label cho trục giả này.
 
A, em đã hiểu rồi ạ. Cái chính ở đây là mình đã có XY chart labeler nên label các cột hàng ko còn quan trọng nữa.
Em cảm ơn ptm0412 nhiều nhé!
 
help me

em đọc nè cũng hiểu một chút, nhu­ng đề bài ra yêu cầu phải vẽ biểu đồ hình cột kia,một bên là giá trị %,một bên là giá trị
Em xem:
- công thức đã sửa ở các cột O, Q, R, T
- định dạng cột O và Q không còn custom
- Chart option thêm Value (Y) Axis Title là "Thousand $"

Rất vui vì em áp dụng thành công cách vẽ này.

Trước khi sửa:

BeforeChange.gif


Sau khi sửa:​



AfterChange.gif
 
Tôi thấy biểu đồ này rất hay, tuy nhiên khi thực hành các giá trị theo tháng hoặc năm thì không được. Nhờ các bạn giúp đỡ
 
Biểu đồ với số liệu các series có khoảng cách lớn với trục t/g là năm

Tôi đã thực hành với đồ thị với số liệu các series có khoảng cách lớn (đây là đồ thị rất hữu ích đối với những người làm công tác báo cáo), tuy nhiên hiện tại tôi vẫn chưa biết cách chuyển trục thời gian (là các ngày) sang trục thời gian là năm/tháng. Tôi xin gửi theo file đính kèm nhờ diễn đàn giúp đỡ.
 

File đính kèm

  • Dothi.xls
    40.5 KB · Đọc: 73
Web KT
Back
Top Bottom